es6 入坑 细节整理

在比较两个值时,一般用全等 === 运算符,但是es5和之前的版本比较鸡肋,比如 +0 和 -0  在Js引擎中表示为两种完全不一样的实体,但是用=== 比较的时候,得到的结果却不一样。

而es6 引入了 Object.is() 方法来弥补这个缺陷,主要是针对 -0 和 +0  , 以及NaN === NaN  的处理。该方法只有在两个参数值和类型一样,才会返回true。

比如 5 == "5"  ,返回的是true, 因为JavaScript 会自动进行类型转换 ,使用严格相等=== 时返回的才是 false,但是使用

Object.is(5, "5") 返回的是false.

 2. Object.assign() 方法代替混合模式,该方法接受任意数量的源对象,按指定顺序将属性复制到接收对象中,靠后源对象会覆盖靠前的。

比如: Object.assign(myObj,  EventTarget.prototype) ;就是将EventTarget 对象的属性复制到myObj对象中。

3.es6中重复属性检查被移除,重复的属性都是会取最后一个取值。

4.自有属性枚举顺序的基本规则:

 a. 所有数字键按升序排序

扫描二维码关注公众号,回复: 4138386 查看本文章

 b. 所有字符串键按他们被加入对象的顺序排列

c. 所有symbol 键 按照他们被加入对象的顺序排序

5.    改变对象的原型: Object.getPrototypeOf( ) 方法改变任意指定对象的原型,接受两个参数:被改变的原型对象及替代第一个参数原型的对象;

6. 使用super 简化原型访问;  super.way() 方法相当于在当前的上下文调用 Object.getPrototypeOf(this).way.call(this)

但是必须在使用简写方法的对象中使用声明,如果在其他方法声明中使用会导致语法错误. 

        this 是 relative , relative  的原型是friend 对象, 当执行relative 的

 getGreeting() 方法时,会调用friend 的getGreeting()方法,而此时的this 值为relative, Object.getPrototypeOf(this)又会返回friend 

对象,所以函数会进入递归调用直到触发栈溢出错误,即 too much recrusion(recrusion 是递归的意思)。

y运用super解决了多重继承的情况,在这里,super引用不是动态变化的,它始终指向正确的对象,这里的super.getGreeting()始终指向person.getGreeting()方法,不管有多少其他的方法继承了 getGreting方法 

猜你喜欢

转载自blog.csdn.net/Jackshijin/article/details/83719450
今日推荐