Подтвердить что ты не робот

Недоумение, если условие в функции слияния jQuery

Я просто просматривал код 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? Это мне почему-то не имеет смысла. Может кто-нибудь объяснить?

4b9b3361

Ответ 1

Это проверка на NaN (как правильно указано в комментарии @Jonathan). Из отличной документации Mozilla:

NaN сравнивает неравные (через ==,! =, ===, и! ==) с любым другим значением - в том числе и с другим значением NaN. Используйте Number.isNaN() или isNaN(), чтобы наиболее четко определить, имеет ли значение NaN. Или выполните самосогласование: NaN и только NaN, будут сравнивать неравные с самим собой.

Ответ 2

Оператор + (унарный плюс) в присваивании var len = +second.length; пытается преобразовать значение second.length в число внутренне вызывая valueOf() и toString(). Если преобразование в число терпит неудачу, оно назначит NaN переменной len. Как было сказано ранее, len !== len - это способ проверить NaN.