2014-07-24 18 views
5

po prostu odczytać kodu źródłowego underscope i nie może dostać punkt, z tym kodem:Jaki jest kod "length === + length" w języku JavaScript?

_.each = _.forEach = function(obj, iterator, context) { 
    if (obj == null) return obj; 
    iterator = createCallback(iterator, context); 
    var i, length = obj.length; 
    if (length === +length) { // why +length? 
     for (i = 0; i < length; i++) { 
      iterator(obj[i], i, obj); 
     } 
    } else { 
     var keys = _.keys(obj); 
     for (i = 0, length = keys.length; i < length; i++) { 
      iterator(obj[keys[i]], keys[i], obj); 
     } 
    } 
    return obj; 
}; 

dlaczego długość === + długość? Domyślam się, że to użyto, by przekonwertować, jeśli długość nie jest liczbą? Czy ktoś może mi pomóc?

+0

Nie było dokładną kopią, to nawet związane z dokładnie tego samego kodu: http://stackoverflow.com/questions/8330499/operator-before-expression-in-javascript-what-does-it -zrobić –

Odpowiedz

2

+length konwertuje dowolną wartość długości na liczbę (NaN, jeśli nie jest to możliwe).

Tak więc length===+length tylko testy, że length jest naprawdę liczbą (nie ciągiem, który można przekonwertować na liczbę) i że nie jest to NaN (który nie jest równy sobie).

Powiązane problemy