素人がプログラミングを勉強していたブログ

プログラミング、セキュリティ、英語、Webなどのブログ since 2008

連絡先: すかいぷ:javascripter_  か javascripter あっと tsukkun.net skypeのほうがいいです

WebKitでサポートされつつあるECMAScript5の新機能たち

最近、WebKitObject.definePropertyObject.definePropertiesObject.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"]

オブジェクトが持つプロパティを列挙する。プロトタイプは辿られない。