ES6 Object的新增 API

本文介绍了ES6为解决对象相等判断的历史遗留问题引入的新API。它与严格相等运算符基本一致,但处理NaN和0的特殊情况不同。此外,还探讨了Object.assign在合并对象时的问题及解决方案,以及ES6中Object.getOwnPropertyNames排序的明确规定。最后,提到了Object.setPrototypeOf作为设置对象隐式原型的方法。

ES6 Object的新增 API

Objext.is

用于判断两个对象是否相等,这其实是一个历史遗留问题,在原来当我们判断相等的时候,会发生一些怪异的现象,那么能不能解决这些问题呢,可以是可以但是老版本的浏览器不太会兼容这些改动,所以不得不这样。

	
	//在我们面临这些问题时就会有一定问题
	console.log(NaN === NaN);//flase
	console.log(+0 === -0);//ture
	//因此ES6出了一种新的API,Objext.is

用于判断两个数据是否相等,基本上跟严格相等===是一致的除了以下两点:

  • NaN === NaN 相等
  • +0 === -0 不相等

Object.assign

用于混合对象


	const obj1 = {
		a : 123,
		b : 456,
		c : 789
	}
	const obj2 = {
		a : 123,
		b : 456,
		c : 789,
		d : 666
	}
	
	const obj = Object.assign(obj1, obj2);
	

此时他会把obj2的属性合并到obj1,有的覆盖没有的添加,但有一个问题是他会将obj1给更改掉,这是在ES6之前遇到的问题在展开运算符之后就不怎么使用了具体见我的博客ES6 剩余参数 展开运算符博客。

一般的解决办法是:


	const obj = Objecct.assign({}, obj1 ,obj2);
	//将前面放一个大括号这样改动的就是第一个对象了

Object.getOwnPropertyNames

Object.getOwnPropertyNames的枚举排序,之前就存在,只不过,官方没有明确要求,对属性的顺序如何排序,而如何排序,完全由浏览器厂商决定。

ES6规定了该方法返回的数组排序方式如下

  • 先排数字,按照升序排序
  • 再排其他,按照书写顺序

	const obj = {
		d : 1,
		b : 2,
		c : 3,
		0 : 5,
		5 : 4,
		4 : 1
	}
	//在一个数组中将属性名按照升序排列,只改变数字不改变其他

结果如下
在这里插入图片描述

Object.setPrototypeOf

该函数用于设置某个对像的隐式原型

比如:Object.setPrototypeOf(obj1 ,obj2),
相当于:obj1.__proto__ = obj2把obj1的原型改为obj2

所以说ES6相当于提供了修改原型的一种方法。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值