[javascript ECMAScript5 メモ] Object.defineProperty, keys

.
EMCAScript5で追加されたObject.definePropertyとObject.keysを確認してみます。

Object.definePropertyは、プロパティの属性enumerableに関係なくキーを配列で返します。
keysはプロパティの属性enumerable=trueのキーのみ返します。
// ビルトインオブジェクトにプロパティを追加
Object.prototype.testMethod = "TESTMETHOD";
Object.defineProperty( Object.prototype, "testMethod2", { enumerable: false });


// Object Literal
console.log("Object Literal ---");
var obj = { id: 1, nickname: "nic" };
Object.defineProperty( obj, "id", { enumerable: false });
console.log( Object.getOwnPropertyNames( obj ) );
console.log( Object.keys( obj ) );
for (var i in obj) {
  console.log(i);
}


// Array Literal
console.log("Array Literal ---");
var array = ["a", "b", "c"];
console.log( Object.getOwnPropertyNames( array ) );
console.log( Object.keys( array ) );
for (var i in array) {
  console.log(i);
}


// Object.prototype
console.log("Object.prototype ---");
console.log( Object.getOwnPropertyNames( Object.prototype ) );
console.log( Object.keys( Object.prototype ) );

// Array.prototype
console.log("Array.prototype ---");
console.log( Object.getOwnPropertyNames( Array.prototype ) );
console.log( Object.keys( Object.prototype ) );

js_e5_tm1.png
参考サイト
15.2.3.4 Object.getOwnPropertyNames ( O )
15.2.3.14 Object.keys ( O )
MDN getOwnPropertyNames
MDN keys