Object.keys数组
定义:返回一个对象可枚举属性的字符串数组;spa
Object.getOwnPropertyNamescode
定义:返回一个对象可枚举、不可枚举属性的名称;对象
定义:可枚举属性是指那些内部 “可枚举” 标志设置为 true 的属性,对于经过直接的赋值和属性初始化的属性,该标识值默认为即为 true,对于经过 Object.defineProperty 等定义的属性,该标识值默认为 false。blog
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.. | Object.getOwnPropertyNames |
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()ip
属性的可枚举性和全部权 字符串