在this page中,您可以看到如何为数组实现indexOf的以下示例:
if (!Array.prototype.indexOf)
{
Array.prototype.indexOf = function(searchElement /*, fromIndex */)
{
"use strict";
if (this === void 0 || this === null)
throw new TypeError();
var t = Object(this);
var len = t.length >>> 0;
if (len === 0)
return -1;
var n = 0;
if (arguments.length > 0)
{
n = Number(arguments[1]);
if (n !== n) // <-- code of interest
n = 0;
else if (n !== 0 && n !== (1 / 0) && n !== -(1 / 0))
n = (n > 0 || -1) * Math.floor(Math.abs(n));
}
if (n >= len)
return -1;
var k = n >= 0
? n
: Math.max(len - Math.abs(n), 0);
for (; k < len; k++)
{
if (k in t && t[k] === searchElement)
return k;
}
return -1;
};
}我的问题是关于这条线:
if (n !== n)在哪种情况下,此布尔表达式将返回true
发布于 2011-02-03 03:48:21
这是验证数字是否为NaN的快捷方式。
假设你有n = Number("string");,那么n !== n的计算结果就是true。
在这种情况下,您可以使用if(isNaN(n))而不是if(n !== n)。
发布于 2011-02-03 03:48:48
这就是检查NaN的方法。他们这样做可能是为了预防,因为可能会覆盖全局函数isNaN。
发布于 2011-02-03 04:01:24
//大多数情况下,您不需要尝试如此精确地模拟规范-
if(!Array.prototype.indexOf){
Array.prototype.indexOf= function(what, i){
if(i==undefined || isNaN(i)) i= 0;
var L= this.length;
while(i< L){
if(this[i]=== what) return i;
++i;
}
return -1;
}
}https://stackoverflow.com/questions/4879065
复制相似问题