对象的扩展内容
Object.is()方法
ECMAScript 5比较两个值是否相等,使用的是相等运算符(==
)和全等运算符(===
)。但这两个运算符在使用时都具有缺点:
- 相等运算符在比较之前,会自动转换数据类型。
- 全等运算符导致 NaN与自身不等,+0 等于-0 等问题。
ECMAScript 6提出了同值相等(Same-value equality)算法来解决以上问题。Object.is()方法就是对同值相等算法的具体实现。
// ES5
console.log(+0 === -0) // true
console.log(NaN === NaN) // false
// ES6
console.log(Object.is(+0, -0)) // false
console.log(Object.is(NaN, NaN)) // true
Object.assign() 方法
Object.assign() 方法用于将所有可枚举属性的值从一个或多个源对象复制到目标对象。
Object.assign(target, ...sources)
- target: 目标对象
- sources: 源对象
- 返回值: 目标对象
const object1 = {
a: 1,
b: 2,
c: 3
};
const object2 = Object.assign({ c: 4, d: 5 }, object1);
console.log(object2.c, object2.d); // 3 5
Object.assign() 方法只会拷贝源对象自身的并且可枚举的属性到目标对象。
super关键字
ECMAScript6新增了 super 关键字用于指向当前对象的原型对象。
const proto = {
foo: "hello"
};
const obj = {
foo: "world",
find() {
return super.foo;
}
};
Object.setPrototypeOf(obj, proto);
console.log(obj.find()); // "hello"
对象的扩展运算符
对象的扩展运算符(…)用于取出参数对象的所有可遍历属性,拷贝到当前对象之中。
let z = { a: 3, b: 4 };
let n = { ...z };
console.log(n); // { a: 3, b: 4 }
上述代码示例等价于 Object.assign() 方法。
let z = { a: 3, b: 4 };
let m = Object.assign({}, z);
console.log(m); // { a: 3, b: 4 }