es6 javascript 的Object.is(),判斷兩個值相等
阿新 • • 發佈:2019-02-02
ES5 比較兩個值是否相等,只有兩個運算子:相等運算子(==)和嚴格相等運算子(===)。它們都有缺點,前者會自動轉換資料型別,後者的NaN不等於自身,以及+0等於-0。 JavaScript 缺乏一種運算,在所有環境中,只要兩個值是一樣的,它們就應該相等。
ES6 提出 “Same-value equality” (同值相等)演算法,用來解決這個問題。Object.is就是部署這個演算法的新方法。它用來比較兩個值是否嚴格相等,與嚴格比較運算子( === )的行為基本一致。
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
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 });