【发布时间】:2015-09-07 05:20:02
【问题描述】:
我只是在浏览 jQuery 的代码时遇到了函数合并。我检查了这个函数的代码:
merge: function( first, second ) {
var len = +second.length,
j = 0,
i = first.length;
while ( j < len ) {
first[ i++ ] = second[ j++ ];
}
// Support: IE<9
// Workaround casting of .length to NaN on otherwise arraylike objects (e.g., NodeLists)
if ( len !== len ) {
while ( second[j] !== undefined ) {
first[ i++ ] = second[ j++ ];
}
}
first.length = i;
return first;
},
现在如果你浏览代码,你会遇到以下if检查:
if ( len !== len )
这在某种程度上对我来说没有意义,这个检查到底是为了什么,它在做什么?
len 在上面几行明确定义,如下所示:
var len = +second.length;
那么为什么有人要检查len !== len 呢?这对我来说毫无意义。有人可以解释一下吗?
【问题讨论】:
-
它看起来并不明智,但看起来很
NaN !== NaN // true。不要问我为什么……isNaN(len)在我看来更合乎逻辑。 -
@Jonathan isNaN 检查
not a Number(string, boolean ...) ,len !== len检查NaN值 -
感谢您指出不同之处。我开始认为
NaN !== NaN是我见过的 JS 中最 wtf 的。
标签: javascript jquery nan