Object.is()
ES5中要比较两个值是否相等,只有两种运算符(== 或 ===)
前者会自动转换数据类型,后者的NaN不等自身,以及+0 和 -0相等
ES6提出同值相等算法, 用来解决这两个问题。
Object.is就是部署这个算法的新方法,它用来比较两个值否严格相等,与严格运算符(===)的行为基本一致
Object.is('foo', 'foo')
// true
Object.is(NaN, NaN)
// true
不同之处有两个,一个是 +0 不等于 -0 NaN等于自身
NaN === NaN // false
+0 === -0 // true
Object.is(NaN, NaN) // true
Object.is(+0, -0) // false
模拟Object.is 处理上面两个问题
Object.definedProperty(Object, 'is', {
value: function (x, y) {
if (x === y) {
// 针对+0 -0
return x !== 0 || 1 / x === 1 / y
}
/*
首先(x !== 0)不管正0还是负0都会返回false
1 / x 如果是正零会返回infinity,负零返回-infinity
1 / y 同上
*/
// 针对NaN的比较
return x !== x && y !== y
/*
首先(x !== x)NaN !== NaN 会返回true
返回true的结果会继续执行
下一步(y !== y)NaN !== NaN ,所有都会返回true。
最后true这个boolean会把返回出去
*/
}
})
Object.assign()
改方法用于对象的合并,将源对象(origin)的所有可枚举的属性,拷贝到目标对象(target)
let target = {
a : 1 }
let origin = {
b : 2 }
let origin1