在比较两个值时,一般用全等 === 运算符,但是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. 所有数字键按升序排序
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方法