1、Object.is()
ES5只有两个运算符:== 相等运算符 === 严格相等运算符。它们都有缺点,前者会自动转换数据类型,后者的NaN不等于自身,以及+0等于-0。JavaScript缺乏一种运算,在所有环境中,只要两个值是一样的,它们就应该相等。
ES6里Object.is部署这个算法的新方法,用来比较两个值是否严格相等,与ES5里的严格相等运算符基本一致,
Object.is(‘foo‘, ‘foo‘) // true Object.is({}, {}) // false
不同之处只有两个:一是+0不等于-0,二是NaN等于自身
+0 === -0 //true NaN === NaN // false Object.is(+0, -0) // false Object.is(NaN, NaN) // true
实例:
let a = -0 let b = +0 let c = NaN let d = NaN if(a==b){ console.log("ES5 == +0 -0...",true); }else{ console.log("ES5 == +0 -0...",false); } if(Object.is(a,b)){ console.log("ES6 Object.is() +0 -0...",true); }else{ console.log("ES6 Object.is() +0 -0...",false); } if(c==d){ console.log("ES5 == NaN ...",true); }else{ console.log("ES5 == NaN ...",false); } if(Object.is(c,d)){ console.log("ES6 Object.is() NaN == NaN...",true); }else{ console.log("ES5 Object.is() NaN == NaN...",false); }
ES5可以通过下面的代码,部署Object.is
Object.defineProperty(Object, ‘is‘, { value: function(x, y) { if (x === y) { // 针对+0 不等于 -0的情况 return x !== 0 || 1 / x === 1 / y; } // 针对NaN的情况 return x !== x && y !== y; }, configurable: true, enumerable: false, writable: true });
2、
原文:https://www.cnblogs.com/zhishiyv/p/14713350.html