Object.is()
Object.is()用来比较两个值是否严格相等,与 "==="行为基本一致
console.log(Object.is('foo', 'foo')); //true
console.log(Object.is({}, {})); // false
不同之处有两个:+0不等于-0,二是NaN等于自身
console.log(+0 === -0); // true
console.log(NaN === NaN); // false
console.log(Object.is(+0, -0)); // false
console.log(Object.is(NaN, NaN)); // true
Object.assign()
Object.assign()方法用于对象的合并,会将源对象(source)的所有可枚举属性,复制到目标对象(target)
const target = { a: 'a' };
const source1 = { b: 'b' };
const source2 = { c: 'c' };
Object.assign(target, source1, source2);
console.log(target); // {a: "a", b: "b", c: "c"}
Object.assign()方法的第一个参数是目标对象,后面的参数都是源对象
如果目标对象与源对象有同名属性,或多个源对象有同名属性,后面的属性会覆盖前面的属性
-
也会处理数组,但是会把数组视为对象。
Object.assign([1, 2, 3], [4, 5]) // [4, 5, 3]
-
Object.assign只能进行值的复制,如果要复制的值是一个取值函数,那么将求值后再复制。
const source = { get foo() { return 1; } } const target = {}; console.log(Object.assign(target, source));//{foo: 1}
Object.keys(),Object.values(),Object.entries()
ES5 引入了Object.keys方法,返回一个数组,成员是参数对象自身的(不含继承的)所有可遍历(enumerable)属性的键名
const obj = { foo: 'bar', baz: 10 }
console.log(Object.keys(obj)); // ["foo", "baz"]
Object.values方法返回一个数组,成员是参数对象自身的(不含继承的)所有可遍历(enumerable)属性的键值。
const obj = { foo: 'bar', baz: 10 }
console.log(Object.values(obj)); // ["bar", 10]
Object.entries()方法返回一个数组,成员是参数对象自身的(不含继承的)所有可遍历(enumerable)属性的键值对数组。
const obj = { foo: 'bar', baz: 10 }
console.log(Object.entries(obj)); // [["foo", "bar"], ["baz", 10]]