JavaScript中的 Object.is() 與 === 運(yùn)算符有什么區(qū)別?
作者:前端小混混
如果要檢查 JavaScript 中的相等性,有兩個(gè)比較運(yùn)算符:雙等號(hào)運(yùn)算符(==)和三等號(hào)運(yùn)算符(===)。
如果要檢查 JavaScript 中的相等性,有兩個(gè)比較運(yùn)算符:雙等號(hào)運(yùn)算符(==)和三等號(hào)運(yùn)算符(===)。
簡(jiǎn)而言之,雙等號(hào)運(yùn)算符(==)僅僅比較值,而三等號(hào)運(yùn)算符(===)可以比較值和類型。但是還有第三個(gè)選項(xiàng) Object.is(),除了 NaN,+0 和 -0 之外,其行為與三等號(hào)于運(yùn)算符相同。
以下是一些例子,可進(jìn)一步明確說明:
- {} === {}; // false
- Object.is({}, {}); // false
- 1 === 1; // false
- Object.is(1, 1); // false
- +0 === -0; // true
- Object.is(+0, -0); // false
- NaN === NaN; // false
- Object.is(NaN, NaN); // true
以下代碼是在 ES5 中模擬實(shí)現(xiàn)的Object.is:
- Object.defineProperty(Object, 'is', {
- value: function(x, y) {
- if (x === y) {
- // 針對(duì)+0 不等于 -0的情況
- return x !== 0 || 1 / x === 1 / y;
- }
- // 針對(duì)NaN的情況
- return x !== x && y !== y;
- },
- configurable: true,
- enumerable: false,
- writable: true
- });
責(zé)任編輯:趙寧寧
來源:
前端先鋒