ES6 Object的新增 API

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
	}
	//在一个数组中将属性名按照升序排列,只改变数字不改变其他

结果如下
ES6 Object的新增 API_第1张图片

Object.setPrototypeOf

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

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

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

你可能感兴趣的:(ES6/ES7)