JavaScript中"value != value"的含义是什么?何时值不等于自身?
解读
if (value != value) return true; 表达式实际含义
这行代码是判断当前值是否为NaN的经典写法。一旦value != value结果为true,就说明value是NaN,此时返回true——这对应Array.prototype.includes的逻辑:如果要查找的目标是NaN,数组只要包含NaN就应该判定为“存在匹配项”。
什么情况下value不等于自身?
在JavaScript里,**只有NaN(非数字值)**会满足value != value(包括严格不等的value !== value)。因为NaN是语言中唯一一个和任何值(包括它自己)都不相等的特殊值:
NaN == NaN→ falseNaN === NaN→ false
这种特性让value != value成为判断NaN最可靠的方式,比全局isNaN()更精准——isNaN()会把能被强制转换为NaN的非数字值(比如字符串'abc')也判定为NaN,但'abc' == 'abc'是true,不会触发这个条件。
结合core-js的场景
这段代码来自core-js对Array.prototype.includes的兼容实现。原生includes支持检测数组中的NaN,但旧版indexOf做不到(因为indexOf用严格相等匹配,[NaN].indexOf(NaN)会返回-1)。core-js这段代码就是处理这个特殊场景:当要查找的目标是NaN时,先标记这个状态,后续遍历数组时会专门检查元素是否为NaN,以此实现和原生includes一致的行为。
内容的提问来源于stack exchange,提问作者vesii
相关产品推荐
相关产品推荐

