为什么这个JavaScript包含()功能有意义?

为什么这个JavaScript包含()功能有意义?

问题描述:

我了解包括()功能,我发现这个代码为什么这个JavaScript包含()功能有意义?

[NaN].includes(NaN) //True

NaN === NaN // False

这是为什么更多钞票?

+2

为什么不可能?你可以很容易地定义你自己的比较值的逻辑:'function isSame(a,b){return isNaN(a)? isNaN(b):a === b;}'。如果你能做到这一点,那么语言也可以做到。 –

使用平等NaN === NaN和使用包括[NaN].includes(NaN)基本上要求两个不同的问题:

  1. 平等 - 这东西有相同的名称实际上是平等的吗?

NaN是一个无定形实体,它描述了不是数值的概念,并且实际上没有可以比较的值。平等使用Strict Equality Comparison,并定义在等式的任何一侧的比较x === yNaN总是false

一个。如果x是NaN,则返回false。 b。如果y是NaN,则返回false。

  1. 包括 - 我有与数组中的 “名” 的东西吗?
  2. 然而,搜索阵列中的一个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 === NaNNaN == 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阵列方法做它的检查。它在内部检查值的类型