携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第15天juejin.cn/post/712312…
1、 Object.is(值1,值2)**
- 作用:判断两个值是否相等。
- ES5里==是比较值,其实该比较也在内部做了数据类型转换,再去进行比较;===比较的是类型和值,但是在===严格全等里面,NaN === NaN,返回结果为false,+0 === -0,返回结果为true。
- 所以ES6又提供了这个新的方法,在这个方法里判断Object.is(NaN,NaN);返回结果是true,Object.is(+0,-0);返回结果为false,其他行为与===基本一致。
2、 Object.assign(目标对象1,源对象2,源对象3...)
- 作用:将对象的所有可枚举属性,复制到目标对象内。(合并对象)
- 如果()里只有一个参数,直接返回该参数。
- 如果该参数不是对象,会先把它转为对象,然后返回。
- 由于undefined和null无法转换成对象,所以会报错。
- 如果非对象参数出现在源对象的位置(即非首参数)。那么处理规则有所不同。首先,这些参数都会转成对象,如果无法转成对象,就会跳过。这就意味着,如果undefined和null不在首参数,就不会报错
- Object.assign()方法只拷贝对象的自身可枚举属性。(不拷贝继承的属性)
注意
1. 浅拷贝
Object.assign()方法实现的是浅拷贝,而不是深拷贝,也就是说,如果源对象的某个属性的值是对象,那么目标对象拷贝的是这个对象的引用(指针)。
2. 同名属性的替换。
目标对象和源对象有同名属性的话,源对象的属性会覆盖目标对象的同盟属性。
3.数组的处理
Object.assign()方法可用来处理数组,但会把数组视为对象。
数组的索引就相当于对象的属性名
4. 取值函数的处理
Object.assign()只能进行值的复制,如果要复制的值是一个取值函数,那么将求值后再复制。
const source = {
get foo() { return 1 }
};
const target = {};
Object.assign(target, source)
// { foo: 1 }
Object.assign()常见用途
- 为对象添加属性
- 为对象添加方法
- 克隆对象(将源对象与一个空对象合并,就得到了一个新的对象)
- 合并多个对象
- 为属性指定默认值
3、Object.getOwnPropertyDscriptors(对象名)
- 作用:获取对象自身所有属性的描述对象。返回值是一个对象,所有怨怒第项的属性就是该对象的属性名,对应的属性值就是该属性的描述对象。
4、Object.getOwnPropertyDscriptor(对象名,‘属性名’)
作用:获取对象的某个属性的描述对象,返回值是个对象。
另一个作用是配合Object.create(这里写对象的原型对象)使用,将对象属性克隆到一个新对象。这属于浅拷贝。Object.create()该方法作用是创建一个对象,里面必须写上原型对象是谁,也可以自己单独设置。
5、Object.getPrototypeOf(对象名)
作用:获取当前对象的原型对象。
6、Object.setPrototypeOf(对象名)
作用:设置当前对象的原型对象。 注意:1. 在ES5里最初用__proto__找到对象的原型对象,后来又变为[[prototype]]找原型对象,现在就可以直接通过以上两种方法获取/设置对象的原型对象。 2. 如果第一个参数不是对象,会自动转为对象,所以如果第一个参数是undefined或null就会报错。
7、Object.keys(对象名)
作用:返回一个数组,成员是参数对象自身(不包含继承)所有可遍历属性的键名。
8、Object.values(对象名)
作用:返回一个数组,包含对象自身(不含继承)所有可遍历的属性的键值。
9、Object.entries(对象名)
作用:返回一个数组,包含对象自身(不含继承)所有可遍历的键值对。每个键值对又是一个数组。 注意:如果参数不是对象,Object.values()会先把其转换为对象,由于数值和布尔值的包装对象,都不会为实例添加非继承的属性。
10、ObjectFormEntries(对象名)
作用:该方法时Object.entries的逆运算,用于将键值对数组转为对象。
- 该方法的主要姆斯,是将键值对的数据解构还原,因此特别适合将Map解构转为对象。
- 该方法的另一用处是配合URLSearchParams对象,将查询字符转为对象。
Object.fromEntries(new URLSearchParams('foo=bar&baz=qux'))
// { foo: "bar", baz: "qux" }