_.indexOf() 'item !== item' - 它的目的是什么
_.indexOf() `item !== item` - what is its purpose?
查看Underscore.js
代码,更具体地说_.indexOf()
函数(在此处查找带有注释的代码)
_.indexOf = function(array, item, isSorted) {
var i = 0, length = array && array.length;
if (typeof isSorted == 'number') {
i = isSorted < 0 ? Math.max(0, length + isSorted) : isSorted;
} else if (isSorted && length) {
i = _.sortedIndex(array, item);
return array[i] === item ? i : -1;
}
if (item !== item) {
return _.findIndex(slice.call(array, i), _.isNaN);
}
for (; i < length; i++) if (array[i] === item) return i;
return -1;
};
我注意到if(item !== item){...}
声明,但我不明白它的目的。 items
是一个参数,不会在函数内部更改。变量何时会与自身不同?
我错过了什么吗?
IEEE-754 NaN不等于自己。if
语句正在检查item
是否为 NaN。如果是,则该函数需要使用特殊逻辑,因为array[i] === item
的搜索循环测试将不起作用。
有关进一步的讨论,请参阅为什么 NaN 不等于 NaN?和所有比较对 IEEE754 NaN 值返回 false 的基本原理是什么?
数字常量NaN
永远不会===
到另一个值,包括它自己。因此,这是一种在没有函数调用的情况下测试NaN
的方法。绝对任何其他item
值都将测试等于其自身:
-
undefined
===
undefined
-
null
===
null
- 数字等于自身,字符串或布尔值也等于自身
- 对对象的引用
===
于自身(并且仅对自身!
相关文章:
- 为什么indexOf在这个js代码中不起作用
- Angularjs通过过滤器获取indexOf
- indexOf具有2个参数
- .indexOf()不适用于特定元音
- Ionic-item在导航栏中进行双向数据绑定
- 对字符串使用IndexOf来挑选某些单词
- 如果window.location.href.indexOf('player=1')添加样式
- inArray,indexOf在二维数组中
- Node.js-chai是一个item对象
- 为什么我得到“;没有方法'indexOf'"在ExtJS4.2中尝试在网格上使用缓冲渲染器时出错
- 需要一些str.indexOf帮助javascript
- Safari Array indexOf找不到任何内容
- TypeError:无法读取属性'indexOf'的未定义
- 过度杀戮?使用indexOf()来发现字符串的内容
- JavaScript indexOf 与数百万个匹配项
- jQuery 字符串转义 onclick='deleteRow(item“+count+”)' 如何引用项目和计数
- 为什么空数组上的 indexOf 不返回 -1
- Array.indexOf 或介于两者之间
- Javascript - 如何使用 .indexOf 而不是开头查找特定字符串
- _.indexOf() 'item !== item' - 它的目的是什么