聊一聊相等運算與 SameValue
- 2019 年 12 月 4 日
- 筆記
本文作者:IMWeb etoileli 原文出處:IMWeb社區 未經同意,禁止轉載
變量的運算是日常開發中必須且頻繁接觸的內容。
其中 相等運算符
可算是使用頻率最高的運算符。
除了直接使用之外,我們平常使用的過濾、映射、排序等等,當然都會進行值的比較。
類型轉換
有一定基礎的開發中都知道,
在 JavaScript
中使用相等運算符,會進行類型轉換,
舉個例子:
'1' == 1 // true true == 1 // true
類型轉換,在開發上,有時候會帶給我們一些便利。
例如少寫幾句代碼:)
但類型轉換也會隱藏陷阱,就像下面的例子:
'0' == 0 // true !!'0' == 0 // false
假設字符串 0
跟 數字 0
均使用變量,
就會寫出非常不直觀,不符合直覺的代碼:
a == b // true !!a == b // false
當然,如果我們使用了 ===
全等運算符,就可以避免掉坑啦。
所以,在日常工作中,要多使用 ===
哦。
SameValue 與 SameValueZero
SameValue
與 SameValueZero
會被成對提及的內容。
這兩個玩意是用來做什麼的呢?
SameValue
與 SameValueZero
其實是 ecma
中,比較值是否相等的算法,具體參考如下:
SameValue
:http://ecma-international.org/ecma-262/6.0/#sec-samevalue
SameValueZero
:http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero
SameValue
與 SameValueZero
是為了解決什麼問題的嗯?
舉個例子,我們都知道 NaN
的定義是與任何其他值均不相等。
因此,就會有以下結果:
NaN == NaN // false NaN === NaN // false
有的時候,我們還是希望可以判斷 NaN
,因此就誕生了 SameValue
:
SameValue(NaN, NaN); // true
SameValue
就像字面意思 Same Value ~
所以,對於 +0
與 -0
則會認為是不同的值:
+0 == -0 // true +0 === -0 // true SameValue(+0, -0); // false
以上兩種情況,就是 SameValue
與 ===
不同的地方。(判斷 NaN
,+0
,-0
時)
那麼還有,SameValueZero
,
使用 SameValueZero
的話,對於 +0
與 -0
則會認為是同一個值:
+0 == -0 // true +0 === -0 // true SameValue(+0, -0); // false SameValueZero(+0, -0); // true
所以, SameValueZero
與 ===
只有一個不是的情況。(判斷 NaN
時)
lodash
我們經常使用的 lodash
,也有大量使用 SameValueZero
,有興趣的同學,可以都了解一下~
以上就是關於相等運算與 SameValue的內容,謝謝。