obj.length === + obj.length in javascript

Nella fonte underscore.js in molti posti mi sono imbattuto

if (obj.length === +obj.length) 

Qualcuno può spiegare, perché lo usano?

È un altro modo di scrivere if (typeof obj.length == 'number') . Perché lo fanno in quel modo, è la supposizione di chiunque. Probabilmente sta cercando di essere intelligente a scapito della leggibilità. Che non è troppo raro in questi giorni, purtroppo …

Sebbene potrebbe essere tale da poter essere compresso di più dai minifiers ( compressore YUI , compilatore di chiusura , UglifyJS , ecc.):

(a.length===+a.length) vs (typeof a.length=='number')

Facendo a modo loro salverebbe 5 byte, ogni istanza.

Questo verifica se la proprietà della length obj è un numero.

L’ operatore unario + converte il suo operando in un numero e l’ operatore di uguaglianza rigorosa confronta il risultato con la proprietà di length originale senza eseguire la coercizione di tipo.

Pertanto, l’espressione sarà true solo se obj.length è un numero reale (non ad es. Una stringa che può essere convertita in un numero).

Penso che il motivo principale per cui stanno verificando se obj.length sia un numero – è di differenziare il tipo di object Object da [object Array] (funzionerebbe anche con oggetti String e Function). [Oggetto object] non ha proprietà di lunghezza.

quindi se

 obj = {a:1, b:2}; //obj.length = undefined obj.length === +obj.length undefined === NaN //false - you know that your obj has type Object // (or some other object, but not Array, !String and !Function) // so, you need to determine size of the obj in some way // or use for in loop to iterate over your obj 

Saluti

PS: IMO risponde alla seconda parte della domanda “perché lo usano”

+obj.length gira obj.length al numero. Penso che questo sia per verificare se obj.length è un numero.