ES6 新增API Object

本文深入探讨了ES6中Object对象新增的API,包括Object.is()进行更严格的值比较,Object.getOwnPropertySymbols()获取所有符号属性,Object.setPrototypeOf()设置对象原型,以及Object.assign()复制和混合对象属性。
摘要由CSDN通过智能技术生成

  Object 也新增了些 API。

一. Object.is(…)

   Object.is(…) 执行比 ===(严格等于) 更加严格的值比较。它调用的是底层 SameValue 算法,基本上和严格等于的比较是一样的,它们有两个区别。

var x = NaN, y = 0, z = -0;
x === x;			//false
y === z;			//true
Object.is(x,x);		//true
Object.is(y,z);		//false

区别就是:

  1. “===” 比较 NaN 结果为false,Object.is(…) 结果为 true。
  2. -0 和 0 , ‘“===” 结果为true,Object.is(…)结果为 false。
二. Object.getOwnPropertySymbols(…)

这个API直接从对象上取得所有符号属性:

var o = {
	a:24,
	[Symbol("b")]:"2020",
	c: true
}
Object.getOwnPropertySymbols(o); // [Symbol(b)] 
三. Object.setPrototypeOf(…)

这个API设置对象的 [[prototype]] 用于行为委托:

var obj1 = {
	print:function(){console.log('2020')}
}
var obj2 = {}
 Object.setPrototypeOf(obj2,obj1)
 obj2.print();  // 2020

  它和设置字面值对象中的 --proto-- 一样,通常在对象创建之后立刻使用,这样代码会更加清晰,不容易出错。

四. Object.assign(…)

  这个API把一个对象的属性复制和混合到另一个对象中去。第一个参数是目标对象,其他传入的参数都是源。源会按照传入的顺序依次排列。对于每一个源,它的可枚举和自己拥有的键值,包括符号都会被通过 = 复制到目标对象,然后返回目标对象。

特点:

  1. 继承的属性不会被复制。
  2. 不可枚举的属性不会被复制,不可枚举的符号同样也不可以被复制。
  3. 只读属性被复制会被作为一个普通属性赋值,复制之后不会是只读属性。

它还可以链接一个对象的原型链,例:

var obj1 = {a(){console.log('2020')}};
var obj2 = Object.assign(Object.create(obj1));
obj2.a(); // 2020
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值