WebKitでサポートされつつあるECMAScript5の新機能たち
最近、WebKitにObject.defineProperty
、Object.defineProperties
、Object.getOwnPropertyDescriptor
等、今まで間接的にしかいじれなかったり、JSからは設定することのできなかった内部プロパティを操作するためのメソッドが入った。現時点のWebKitに入っているECMAScript5の新しい機能をここにメモしておく。
const:
const foo = "hello";
定数を宣言するためのconst文。ただ、何故かfooに値を再代入できてしまう(?)ようだ。
Array#forEach、Array#some等:
[1, 2, 3, 4].forEach(function (v, i) { alert(v + ", " + i); });
今までfor文などを使って書いていた物を高階関数を使って抽象化したメソッド達。Array.forEach
のようなgenericな関数はFirefox限定の機能なので、使うことはできない。
Array.isArray:
Array.isArray([]); // true
オブジェクトが配列かどうか判定するメソッド。別のウィンドウ、フレームから持ち込まれたオブジェクトに対しても使える。ECMAScript5以前でも、内部クラスを取得するのにObject.prototype.toString
を使って、Object.prototype.toString.call([]) == "[object Array]"
とすることでほぼ同等な事が実現できる。
Object.defineProperty、Object.defineProperties、Object.create等:
Object.defineProperty(Object.prototype, "prop", { enumerable: false, value: "hello" }); alert({}.prop); // hello for (var k in {}) alert(k); // propは列挙されない
Object.keys:
var o = {a: 1, b: 2, c: 3}; Object.prototype.d = 4; Object.keys(o); // ["a", "b", "c"]
オブジェクトが持つプロパティを列挙する。プロトタイプは辿られない。