【Object】常用API汇总

41 阅读3分钟

这是一个对于Object对象的常用方法进行汇总,都是一个我开发中遇到的使用方法,欢迎大家评论区补充

首先我们创建一个常用的对象用于举例

 let object1 = { a: 1, b: 'string1' }
 let object2 = { b: 2, c: 'string2' }

1. Object.keys()

返回一个数组,数组包含对象所有可枚举属性名称

 // 语法
 Object.keys(obj)
 // 举例
 Object.keys(object1) // [a, b]
 Object.keys(object2) // [b, c]

2. Object.values

返回一个数组,数组包含对象所有可枚举的属性value值

  • 语法
 Object.keys(obj)
  • 举例
 Object.values(object1) // [1, 'string1']
 Object.values(object2) // [2, 'string2']

3. Object.assign()

返回一个对象,可以将多个对象分配给一个对象,一般用来合并对象

  • 语法
  • 参数:target 目标参数,sources源对象
 Object.keys(otarget, ...sourcesj)
  • 举例
 //克隆了obj1对象
 Object.assign({},object1) // { a: 1, b: 'string1' }
 //对同名属性b进行了替换
 Object.values(object1,object2) // { a: 1, b: 2, c: 'string2' }
 //此时object1的值也为{ a: 1, b: 2, c: 'string2' },因为object2的值赋给了object1
 console.log(object1) // { a: 1, b: 2, c: 'string2' }

4. Object.entries()

返回一个数组,数组包含对象自身可枚举属性的键值对数

  • 语法:
 Object.entries(obj)
  • 举例
 Object.entries(object1) // [[a,1], [b,'string1']]
 Object.entries(object2) // [[b,2], [c,'string2']]

5. Object.fromEntries

返回一个对象,一个由键值对列表转换的对象,与Object.entries()相反

  • 语法:
  • 参数:iterable类似Array、Map或者其它实现了可迭代协议的可迭代对象
 Object.fromEntries(iterable)
  • 举例
 let arr1 = [[a,1], [b,'string1']]
 Object.fromEntries(arr1) // { a: 1, b: 'string1' }
 // 与Object.entries()相反
 Object.fromEntries(Object.entries(object2)) // { b: 2, c: 'string2' }

6. Object.prototype.hasOwnProperty

返回boolean,判断某个对象自身属性中是否具有指定的属性,只会对自身属性进行判断,继承来的一律返回false

  • 语法:
  • 参数:iterable类似Array、Map或者其它实现了可迭代协议的可迭代对象
 obj.hasOwnProperty(prop)
  • 举例
 Object.prototype.property1 = 111
 object1.hasOwnProperty("a") // true
 object1.hasOwnProperty("b") // true
 object1.hasOwnProperty("c") // false
 object1.hasOwnProperty("property1") // false
 object1.hasOwnProperty("toString") // false

7. defineProperty

定义对象属性,可以将对象中某个属性的内部属性进行修改

  • 语法:
  • 参数:obj是对象名; key是对象中的属性名;{}是这个属性的相关配置,包括value值、writable是否允许修改、enumerable是否允许枚举、configurable是否允许删除
 Object.defineProperty(obj, key, {})
  • 举例
 let object1 = { a: 1, b: 'string1' }
 // 给对象新加一个属性
 Object.defineProperty(object1, "newData1", {
   value: 10,
   writable: true, // 是否允许修改
   enumerable: true, // 是否允许枚举
   configurable: true, // 是否允许删除
 });
 object1.newData1 // 10
 object1 // { a: 1, b: 'string1', newData1: 10 }

8. Object.getOwnPropertyNames()

返回一个数组,数组包含对象全部属性名称(可枚举或不可枚举)

  • 语法:
 Object.getOwnPropertyNames(obj)
  • 举例
 let object1 = { a: 1, b: 'string1' }
 // 将b变为不可枚举属性
 Object.defineProperty(object1, "b", {
   enumerable: false, 
 });
 ​
 Object.keys(object1) // [a]
 Object.getOwnPropertyNames(object1) // [a, b]

9. Object.is

它用来比较两个值是否严格相等,与严格比较运算符(===)的行为基本一致

  • 语法:
  • 参数:value1和value2是对比的参数
 Object.is(value1, value2)
  • 举例
 Object.is('foo', 'foo')     // true
 Object.is({}, {})         // false
 ​
 不同于 === 之处
 +0 === -0                  //true
 NaN === NaN                // false
 Object.is(+0, -0)           // false
 Object.is(NaN, NaN)         // true