Właśnie przejrzałem kod jQuery i natrafiłem na funkcję scalania. Sprawdziłem kod funkcji:Zakłopotanie, jeśli warunek w funkcji scalania 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;
},
Teraz jeśli pójdziesz za pomocą kodu, można natknąć się na następującym if
sprawdzenia:
if (len !== len)
to jakoś nie ma sensu do mnie do czego dokładnie służy ta kontrola i co ona robi?
len
jest jasno zdefiniowany kilka linijek wyżej, tak jak poniżej:
var len = +second.length;
Więc dlaczego ktoś sprawdzić czy len !== len
? To jakoś nie ma dla mnie sensu. Czy ktoś może wyjaśnić?
To nie wygląda rozsądnie, ale wygląda na "NaN! == NaN // true". Nie pytaj mnie, dlaczego ... 'isNaN (len)' wygląda dla mnie bardziej logicznie. – Jonathan
@ Jonathan isNaN sprawdź, czy 'nie jest liczbą' (string, boolean ...),' len! == len' sprawdź wartość 'NaN'a – Hacketo
Dzięki za wskazanie różnicy. Przyszedłem pomyśleć, że 'NaN! == NaN' jest najbardziej wtf w JS, jaki kiedykolwiek widziałem. – Jonathan