Object.keys()返回对象自身可枚举属性组成的数组
Object.keys()方法是对一个对象的key遍历,会把key组成一个数组返回
示例:
// 参数为数组时,返回的是数组的索引 let arr1 = [1, 2, '3'] console.log(Object.keys(arr1)) // (3)["0", "1", "2"] let arr2 = [1, 2, '3', 'p', 're'] console.log(Object.keys(arr2)) // (5)["0", "1", "2", "3", "4"] // 参数为对象,返回的是对象的key属性 let obj1 = { name: 'jack', age: 16, height: 178 } console.log(Object.keys(obj1)) // (3)["name", "age", "height"] let obj2 = { name: 'jack', age: 16, hello: function () { console.log('hello') } } console.log(Object.keys(obj2)) // (3)["name", "age", "hello"] // Object.keys()只能返回对象的可枚举属性,不可枚举的不能返回 let obj3 = { name: 'jack', age: 16, hello: function () { console.log('hello') } } // Object.defineProperty(obj, key, property)给对象设置属性或修改属性,obj设置的对象,key需要新增或修改的属性,propert属性配置值 Object.defineProperty(obj3, 'hobby', { value: 'printer', enumerable: false // enumerable设置对象的属性是否可枚举,默认为true, }) console.log(obj3, Object.keys(obj3)) // {name: "jack", age: 16, hello: ƒ, hobby: "printer"} // (3)["name", "age", "hello"] // 如果参数不是一个对象,在es2015会强制转换为对象,在之前版本会报错 let string = 'foo' console.log(Object.keys(string)) // (3)["0", "1", "2"] // 如果需要返回对象的全部属性(包括可枚举和不可枚举)可以使用Object.getOwnPropertyNames()方法 // Object.getOwnPropertyNames()方法根据字面意义就是返回对象自身全部属性名 let obj3 = { name: 'jack', age: 16, hello: function () { console.log('hello') } } Object.defineProperty(obj3, 'hobby', { value: 'printer', enumerable: false }) console.log(obj3, Object.getOwnPropertyNames(obj3)) // {name: "jack", age: 16, hello: ƒ, hobby: "printer"} // (4)["name", "age", "hello", "hobby"]