[TOC] #### 1. Object.assign() --- Object.assign() 用于将所有可枚举属性的值从一个或多个源对象复制到目标对象,并返回目标对象 通俗来讲,就是用于将一个或多个对象合并到目标对象。这也是实际开发中使用最多的场景 下面是将 user2 合并到 user1 对象中,并且返回值是合并后的结果 ```javascript const user1 = { name: 'liang' } const user2 = { age: 20, likes: ['html', 'css'] } Object.assign(user1, user2) console.log(user1) // {"name":"liang","age":20,"likes":["html","css"]} ``` 如果目标对象和源对象有同名属性,则后面的属性会覆盖前面的属性 ```javascript const user1 = { name: 'liang' } const user2 = { name: 'wang', age: 24 } Object.assign(user1, user2) console.log(user1) // {"name":"wang","age":24} ``` Object.assign() 合并对象是浅拷贝,而非深拷贝 浅拷贝只会拷贝对象的第一层属性,如果这些属性是对象,则不会对这些对象进行拷贝,而是直接复制对象的引用。这意味着,对于浅拷贝后的对象,如果原对象的属性值发生了变化,浅拷贝后的对象的属性值也会跟着发生变化 ```javascript const user1 = { name: 'liang' } const user2 = { likes: ['html', 'css'] } Object.assign(user1, user2) user2.likes.push('js') console.log(user1) // {"name":"liang","likes":["html","css","js"]} ``` 合并对象但是不希望改变目标对象原本的值,可以这样写 : ```javascript const user1 = { name: 'liang' } const user2 = { age: 24, height: 180 } const merge = Object.assign({}, user1, user2) console.log(merge) // {"name":"liang","age":24,"height":180} ``` #### 2. Object.keys() --- Object.keys() 用于获取对象的键名,并且返回一个包含所有键名的数组 ```javascript const user = { name: 'liang', age: 24, height: '180cm' } const array = Object.keys(user) console.log(array) // ["name","age","height"] ``` JS 的 Object.keys() 方法类似于 PHP 函数 array_keys() ```php array_keys(array) ``` #### 3. Object.values() --- Object.keys() 用于获取对象的键值,并且返回一个包含所有键值的数组 ```javascript const user = { name: 'liang', age: 24, height: '180cm' } const array = Object.values(user) console.log(array) // ["liang",24,"180cm"] ``` JS 的 Object.keys() 方法类似于 PHP 函数 array_keys() ```php array_values(array) ``` #### 4. Object.entries() --- Object.keys() 返回一个包含所有键值对的数组 ```javascript const user = { name: 'liang', age: 24, height: '180cm' } const array = Object.entries(user) console.log(array) // [["name","liang"],["age",24],["height","180cm"]] ``` #### 5. Object.is() --- Object.is() 用来比较两个值是否严格相等,和严格比较运算符 (===) 基本一致 Object.is() 和严格比较运算符 (===) 的不同之处有两个: `0 和 -0`、`NaN 等于自身`,其他情况下作用完全相同 ```javascript console.log(0 === -0) // true console.log(Object.is(0, -0)) // false console.log(NaN === NaN) // false console.log(Object.is(NaN, NaN)) // true ```