定義
Object.keys
定義:傳回一個對象可枚舉屬性的字元串數組;
Object.getOwnPropertyNames
定義:傳回一個對象可枚舉、不可枚舉屬性的名稱;
屬性的可枚舉性、不可枚舉性
定義:可枚舉屬性是指那些内部 “可枚舉” 标志設定為 true 的屬性,對于通過直接的指派和屬性初始化的屬性,該辨別值預設為即為 true,對于通過 Object.defineProperty 等定義的屬性,該辨別值預設為 false。
例子
var obj = { "prop1": "v1" };
Object.defineProperty(obj, "prop2", { value: "v2", writable: false });
console.log(Object.keys(obj).length); //output:1
console.log(Object.getOwnPropertyNames(obj).length); //output:2
console.log(Object.keys(obj)); //output:Array[1] => [0: "prop1"]
console.log(Object.getOwnPropertyNames(obj)); //output:Array[2] => [0: "prop1", 1: "prop2"]
内置的判斷,通路和疊代方法
功能 | 可枚舉 | 可枚舉、不可枚舉 |
判斷 | propertyIsEnumerable | in/hasOwnProperty |
通路 | Object.keys | Object.getOwnPropertyNames |
疊代 | for..in.. |
實戰
var obj = { "prop1": "v1" };
Object.defineProperty(obj, "prop2", { value: "v2", writable: true });
console.log(obj.hasOwnProperty("prop1")); //output: true
console.log(obj.hasOwnProperty("prop2")); //output: true
console.log(obj.propertyIsEnumerable("prop1")); //output: true
console.log(obj.propertyIsEnumerable("prop2")); //output: false
console.log('prop1' in obj); //output: true
console.log('prop2' in obj); //output: true
for (var item in obj) {
console.log(item);
}
//output:prop1
for (var item in Object.getOwnPropertyNames(obj)) {
console.log(Object.getOwnPropertyNames(obj)[item]);
}
//ouput:[prop1,prop2]
相關連結
Object.hasOwnProperty()
Object.propertyIsEnumerable()
Object.getOwnPropertyNames()
Object.keys()
屬性的可枚舉性和所有權
關注下面二維碼,訂閱更多精彩内容。

關注公衆号(加好友):
作者:
王磊的部落格
出處:
http://vipstone.cnblogs.com/