我瞭解包括()功能,我發現這個代碼爲什麼這個JavaScript包含()功能有意義?
[NaN].includes(NaN) //True
但
NaN === NaN // False
這是爲什麼更多鈔票?
我瞭解包括()功能,我發現這個代碼爲什麼這個JavaScript包含()功能有意義?
[NaN].includes(NaN) //True
但
NaN === NaN // False
這是爲什麼更多鈔票?
使用平等NaN === NaN
和使用包括[NaN].includes(NaN)
基本上要求兩個不同的問題:
NaN
是一個無定形實體,它描述了不是數值的概念,並且實際上沒有可以比較的值。平等使用Strict Equality Comparison,並定義在等式的任何一側的比較x === y
與NaN
總是false
:
一個。如果x是NaN,則返回false。 b。如果y是NaN,則返回false。
然而,搜索陣列中的一個NaN
,並保持到陣列#包括僅通過一個特性參數的簽名,而不是回調,我們需要一種方法來「名」就是我們正在尋找。爲了做到這一點,ccording到Array#包括在ECMAScript 2016 (ECMA-262) docs定義:
該方法包括有意地以兩種方式類似的indexOf 方法不同。首先,它使用SameValueZero算法 代替嚴格平等比較,允許它檢測NaN 數組元素。其次,它不會跳過丟失數組元素, 而是將它們視爲未定義。
的SameValueZero(x, y)定義指出比較時:
如果x是NaN和y是NaN,返回true。
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/isNaN
不像在JavaScript中的所有其他可能的值,它是不可能依靠相等運算符(==和===)來確定一個值是否是NaN或沒有,因爲兩者的NaN == NaN和NaN === NaN評估爲false。因此,isNaN函數的必要性。
[ NaN ].includes(NaN)
這是做什麼檢查NaN
是否在[ ]
。
NaN === NaN
和NaN == NaN
仍將返回相同的值,即false
。你只需要知道includes
方法檢查一個值是否是它被調用的數組。罩後面我想使用typeof()
typeof(NaN) // number
[ NaN ].includes(NaN) // true
typeof("1") // string
[ 1 ].includes("1") // false
typeof(1) // number
[ 1 ].includes(1) // true
此根據SameValueZero算法,該includes
方法使用includes
陣列方法做它的檢查。它在內部檢查值的類型
爲什麼不可能?你可以很容易地定義你自己的比較值的邏輯:'function isSame(a,b){return isNaN(a)? isNaN(b):a === b;}'。如果你能做到這一點,那麼語言也可以做到。 –