javascript - 为什么这个 JavaScript includes() 特性有意义?

标签 javascript arrays include nan

<分区>

我正在学习 includes() 功能,我找到了这段代码

[NaN].includes(NaN)//真

但是

NaN === NaN//假

为什么这是可能的?

最佳答案

使用相等 NaN === NaN 和使用 include [NaN].includes(NaN) 基本上是在问两个不同的问题:

  1. 平等 - 这些具有相同名称的事物实际上是平等的吗?

NaN 是一个非晶实体,它描述了不是数值的概念,实际上没有可以比较的值。平等使用 Strict Equality Comparison , 并定义了 x === y 与等式任一侧的 NaN 的比较始终为 false:

a. If x is NaN, return false.
b. If y is NaN, return false.

  1. 包括 - 数组中是否有具有该“名称”的内容?

但是,要在数组中搜索 NaN,并保持 to Array#includes 只传递一个参数而不是回调的签名,我们需要一种方法来“命名”什么我们正在寻找。为了使之成为可能,根据 ECMAScript 2016 (ECMA-262) docs 中的 Array#includes 定义:

The includes method intentionally differs from the similar indexOf method in two ways. First, it uses the SameValueZero algorithm, instead of Strict Equality Comparison, allowing it to detect NaN array elements. Second, it does not skip missing array elements, instead treating them as undefined.

SameValueZero(x, y)的定义声明比较时:

If x is NaN and y is NaN, return true.

关于javascript - 为什么这个 JavaScript includes() 特性有意义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46838690/

相关文章:

c - 如何在单个项目中管理教科书中的大量示例代码?

javascript - 链接翻转时 DIV 背景图像交换

javascript - jQuery 动态生成范围 slider

python - 如何使对象在按键时在对象数组中移动?

include - Jade - 使用 --watch 不会触发包含的刷新

extjs - 在 Web 应用程序中包含 EXTJS 5 库

javascript - window.scroll 上的函数并获取垂直偏移量

javascript 文本区域滚动顶部

通过定义一个新的函数 strend 和没有它(单独)来检查字符串 a 是否位于字符串 b 的末尾?

java - 类型不匹配无法从 String 转换为 int