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"]
原文地址:https://www.cnblogs.com/steamed-twisted-roll/p/10913408.html