ECMAScript

typeof null === 'object' は ECMAScript 3 の仕様バグ

ECMAScript 3 の typeof 演算子 typeof演算子は対象の型を返す演算子ですが、null に適用すると "object" が返ってきます。 console.log(typeof null === 'object'); // true では、null は Object 型なのか、というとそうではなくて仕様バグだったりします…

Date() と new Date() は等価ではない

概要 Native Object のコンストラクタの中には関数呼び出しとコンストラクタ呼び出しが同じ動作になるものがあります。例えば、Array() は new Array() と等価です。 new Array(1, 2, 3); // [1, 2, 3] Array(1, 2, 3); // [1, 2, 3] 対して、Date() は new …

MDN ではfor文の第一要素を初期化式(initial-expression)と説明している

概要 for文の第一要素で変数宣言するコードは次のようになります。 for (var i = 0; i < 10; i++) { alert(i); } この時、var i = 0 が「式」であるかのように誤解されることがあるようです。 ECMAScript 3 では ECMAScript 3 では ExpressionNoIn と Variab…

ECMAScript 5 規定の undefined は書き換え不可能

概要 次のようなコードをよく見ます。 undefined = 1; // 1 (function () { var undefined; // 同名のローカル変数を定義 alert(undefined); // undefined })(); ところが、ECMAScript 5.1 規定の undefined は書き換え不可能([[Writable]]: false)です。 15…

ECMAScript 5 の Strict Mode でグローバルオブジェクトを得る

Strict Mode ECMAScript 5 には Strict Mode という仕組みがあり、Strict Mode では様々な機能(誤解の元となる機能、危険な機能)が制限されています。Strcit Mode になると関数コード内で this === undefined となり、this でグローバルオブジェクトを参照で…

IE8- は名前付き関数式を関数宣言としても扱う

ECMAScript の 名前付き関数式 ECMAScript には「名前付き関数式」があり、変数に関数式を代入するときに名前をつけることが出来ます。 var hoge = function foo () { alert(foo); // function foo() { ... } alert(foo === hoge); // true }; ここでは "foo…

XPath の transelate() を JavaScript で実装する

概要 XPath の translate() を JavaScript で実装しました。 XPath の仕様通りに実装した translate.js と機能拡張した translate-by-array.js があります。 translate.js XPath の仕様通り、String型の値を引数にとります。1文字単位での置換しか行えません…

全角/半角文字を変換する

think49 think49「半角文字 <-> 全角文字」の文字マップを生成してみた。https://ideone.com/sttNv #ECMAScript #JavaScript5月10日 11:46 PM think49 think49to-zenkaku.js : 半角文字を全角文字に変換する - Gist https://gist.github.com/964592 #ECMAScr…

babu_babu_baboo さん作 UUID生成器 (version 5) を試してみる

think49 think49UUID version5 - babu_babu_babooのごみ箱 http://goo.gl/jvDBU #ECMAScript #JavaScript #RFC41223月25日 6:04 PM think49 think49@think49 RFC4122 http://goo.gl/EYSEn に準拠したUUIDを生成するJavaScriptライブラリらしい。3月25日 6:38…

var でDontDelete属性が付与されるのは ES3 まで

think49 think49JavaScript Coding Guidelines for Mac OS X: メモリとパフォーマンスの検討事項 http://goo.gl/Pmglp #JavaScript #ES33月22日 1:34 PM think49 think49@think49 そもそも、VariableStatement はDontDelete属性を付与するから delete できな…

"use strict"; はグローバルコードに書いても良い

JSLint ではグローバルコードに 'use strict'; を書くとエラーになるが、ECMAScript 5 違反ではないらしい。(おそらく、Crockford氏の独自の思想によるエラーだと思う) think49 think49'use strict'; はグローバルコードに書いてはいけないんだったかな。JSL…

Feature Detection と UA Detection どちらを使うべき?

think49 think49Feature Detection は未知の UA に対してのみ行うべき? - by edvakf in hatenahttp://goo.gl/sueOj #JavaScript #ECMAScript2月16日 11:23 PM think49 think49@think49 "Feature Detection は遅いし、既知の UA に対してまで毎回 Feature De…