1、Object.is()
Object.is()用来比较两个值是否严格相等,与严格比较运算符(===)的行为基本一致
不同之处只有两个:+0不等于-0,NaN等于自身。
ES5可以通过以下代码部署Object.is()
2、Object.assign()
Object.assign()方法用于对象的合并,将源对象的所有可枚举属性,复制到目标对象
const target = {a:1};
const source1 = {b:2};
const source2 = {c:3};
Object.assign(target,source1,source2);
target //{a:1,b:2,c:3}
注:如果目标对象与源对象有同名属性,或多个源对象有同名属性,则后边的属性会覆盖前边的属性
const target = { a: 1, b: 1 };
const source1 = { b: 2, c: 2 };
const source2 = { c: 3 };
Object.assign(target, source1, source2);
target // {a:1, b:2, c:3}
3、Object.getOwnPropertyDescriptors()
该方法会返回某个对象属性的描述对象
const obj = {
foo: 123,
get bar() { return 'abc' }
};
Object.getOwnPropertyDescriptors(obj)
// { foo:
// { value: 123,
// writable: true,
// enumerable: true,
// configurable: true },
// bar:
// { get: [Function: get bar],
// set: undefined,
// enumerable: true,
// configurable: true } }
该方法的引入目的,主要是为了解决Object.assign()无法正确拷贝get属性和set属性的问题。
4、__proto__属性,Object.setPrototypeOf(),Object.getPrototypeOf()
Object.setPrototypeOf方法的作用域__proto__相同,用来设置一个对象的原型对象,返回参数对象本身。是ES6正式推荐的设置原型对象的方法。
setPrototypeOf()
//格式
Object.setPrototypeOf(object,prototype)
//用法
const o = Object.setPrototypeOf({},null);
该方法等同于下面的函数
function setPrototypeOf(obj,proto){
obj.__proto__ = proto;
return obj;
getPrototypeOf()
用于读取一个对象的原型对象
Object.getPrototypeOf(obj);
5、Object.keys(),Object.values(),Object.entries()
Object.keys()返回一个数组,成员是参数对象自身的所有可遍历属性的键名
var obj = { foo: 'bar', baz: 42 };
Object.keys(obj)
// ["foo", "baz"]
Object.values()返回一个数组,成员是参数对象自身的所有可遍历属性的键值
const obj = { foo: 'bar', baz: 42 };
Object.values(obj)
// ["bar", 42]
Object.entries() 返回一个数组,成员是参数对象自身的(不含继承的)所有可遍历(enumerable)属性的键值对数组。
const obj = { foo: 'bar', baz: 42 };
Object.entries(obj)
// [ ["foo", "bar"], ["baz", 42] ]
6、Object.fromEntries()
Object.fromEntries()方法是Object.entries()的逆操作,用于将一个键值对数组转为对象。
Object.fromEntries([
['foo', 'bar'],
['baz', 42]
])
// { foo: "bar", baz: 42 }