原文:ECMAScript 6 -- 对象的新增方法
1. Object.is()
Object.is() 用来比较两个值是否完全相等
与 === 不同的是 Object.is() 作比较时 -0 不等于 +0 且 NaN 等于自身
Object.is('foo', 'foo'); // true
Object.is({}, {}); // false
Object.is(-0, +0); // false
Object.is(NaN, NaN); //true
2. Object.assign()
Object.assign() 用于合并对象,第一个参数是目标对象(target),后面的参数都是源对象(source)
如果目标对象和源对象或源对象之间有同名属性,后面的属性会覆盖前面的属性
Object.assign() 只拷贝源对象的自身属性(不拷贝继承属性),不拷贝不可枚举属性
const target = { a = 1, b = 2 };
const source1 = { b= 3, c = 4 };
const source2 = { c = 5 };
Object.assign(target, source1, source2);
console.log(target); // { a = 1, b = 3, c = 5 }
参数不是对象,会先转为对象
typeof Object.assign(2) // "object"
参数是 undefined 或 null
- 如果是目标对象,会报错
Object.assign(undefined) // Erro
Object.assign(null) // Erro
- 如果是源对象,会跳过
Object.assign(obj, undefined) === obj // true
Object.assign(obj, null) === obj // true
源对象是数值或布尔值,会被忽略 源对象是字符串,会被以数组形式拷贝到目标对象
const v1 = 'abc';
const v2 = true;
const v3 = 7;
const obj = Object.assign({}, v1, v2, v3);
console.log(obj) // {'0': 'a', '1': 'b', '2': 'c'}
未完待续...