如果jQuery中的条件合并函数

时间:2015-06-21 19:19:27

标签: javascript jquery nan

我刚刚浏览了jQuery的代码并遇到了函数merge。我查看了这个函数的代码:

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?这在某种程度上对我没有意义。有人可以解释一下吗?

2 个答案:

答案 0 :(得分:15)

这是对NaN的检查(正如@ Jonathan的评论中正确指出的那样)。从优秀的Mozilla documentation

  

NaN将不等(via ==,!=,===和!==)与任何其他值进行比较 - 包括另一个NaN值。使用Number.isNaN()isNaN()可以最清楚地确定值是否为NaN。或者执行自我比较:NaN,只有NaN,将与自己进行比较。

答案 1 :(得分:4)

作业WebClient webClient = new WebClient(BrowserVersion.FIREFOX_38); HtmlPage page = webClient.getPage("http://127.0.0.1:8080/fundtest/demo.html"); HtmlDivision div1=(HtmlDivision)page.getElementById("1"); HtmlDivision div2=(HtmlDivision)page.getElementById("2"); HtmlDivision div3=(HtmlDivision)page.getElementById("3"); HtmlDivision div4=(HtmlDivision)page.getElementById("4"); webClient.closeAllWindows(); System.out.println(div1.asText() + div2.asText() + div3.asText() + div4.asText()); 中的+运算符(unary plus)尝试通过内部调用var len = +second.length;和{{1}将值second.length转换为数字}}。如果转换为数字失败,则会将valueOf()分配给变量toString()。如前所述,NaN是检查len的方法。