天天看點

使用datepickerdialog提示is undefined錯誤_JavaScript中的Object.is()與“===”運算符

使用datepickerdialog提示is undefined錯誤_JavaScript中的Object.is()與“===”運算符

三重相等運算符

===

嚴格檢查2個值是否相同:

1 === 1;    // => true
1 === '1';  // => false
1 === true; // => false
           

但是,ES2015規範引入了

Object.is()

,其行為與嚴格的相等運算符幾乎相同:

Object.is(1, 1);    // => true
Object.is(1, '1');  // => false
Object.is(1, true); // => false
           

主要問題是:什麼時候使用

Object.is()

代替嚴格的相等性檢查?讓我們找出答案。

1.嚴格相等檢查操作符

首先,讓我們快速回顧一下嚴格的相等運算符是如何工作的。

當兩個值的類型相同且持有相同的值時,嚴格相等檢查運算符的計算結果為

true

例如,以下原始值是相等的,因為它們是相同的類型且具有相同的值:

1         === 1;         // => true
'abc'     === 'abc';     // => true
true      === true;      // => true
null      === null;      // => true
undefined === undefined; // => true
           

嚴格相等運算符不執行類型的強制轉換,即使操作符持有合理的相同值,但是不同類型的操作符,它們也不是嚴格相等的:

1    === '1';       // => false
1    === true;      // => false
null === undefined; // => false
           

對對象執行嚴格相等檢查時,對象僅與自身嚴格相等:

const myObject = { prop: 'Value' };
myObject === myObject;  // => true
           

即使2個對象的屬性和值完全相同,它們的值也不同:

const myObject1 = { prop: 'Value' };
const myObject2 = { prop: 'Value' };
myObject1 === myObject2; // => false
           

以上比較方案在

Object.is(valueA,valueB)

中的工作原理完全相同。

嚴格相等檢查和

Object.is()

之間的差別在于,如何處理

NaN

和如何處理負零

-0

首先,

NaN

(非數字)并不嚴格等于任何其他值,即使使用另一個

NaN

NaN === NaN; // => false
NaN === 1;   // => false
           

其次,嚴格相等運算符不能将

-0

+0

區分開:

-0 === +0; // => true
           
嚴格相等運算符使用嚴格相等比較算法。 http://www. ecma-international.org/ ecma-262/7.0/index.html#sec-strict-equality-comparison

2. Object.is()

Object.is(valueA,valueB)

以與嚴格相等運算符相同的方式檢查相等性的參數,但有兩個差別。

首先,

NaN

等于另一個

NaN

值:

Object.is(NaN, NaN); // => true
Object.is(NaN, 1);   // => false
           

其次,

Object.is()

區分

-0

+0

Object.is(-0, +0); // => false
           
與嚴格相等運算符相比,

Object.is()

使用相同值比較算法。 http://www. ecma-international.org/ ecma-262/7.0/index.html#sec-samevalue

總結

在大多數情況下,嚴格相等運算符是比較值的好方法。

如果你想直接檢查

NaN

值或對負零和正零進行更嚴格的區分,那麼

Object.is()

是一個不錯的選擇。

Object.is()

作為比較值的函數性方法也很有用,例如在函數式程式設計中。

來源:https://dmitripavlutin.com,作者:Dmitri Pavlutin,翻譯:公衆号《前端全棧開發者》