27 votes

obj.longueur === +obj.longueur en javascript

Dans underscore.js source dans de nombreux endroits, je suis tombé sur

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

Quelqu'un peut m'expliquer, pourquoi utilisent-ils?

30voto

brianreavis Points 6351

C'est une autre manière d'écrire if (typeof obj.length == 'number'). Pourquoi ils le font de cette façon, c'est n'importe qui conjecture. Probablement en train de faire de l'esprit au détriment de la lisibilité. Ce qui n'est pas trop rare ces jours-ci, malheureusement...

Bien qu'il puisse être, de sorte qu'il peut être plus comprimés par minifiers (YUI Compressor, Compilateur de Fermeture, UglifyJS, etc):

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

Faire leur permettrait d'économiser 5 octets, chaque instance.

23voto

Frédéric Hamidi Points 123646

Ce test s' objs' length de la propriété est un nombre.

Le unaire + opérateur convertit son opérande pour un certain nombre, et l' opérateur d'égalité stricte compare le résultat avec l'original length de la propriété sans effectuer de contrainte de type.

Par conséquent, l'expression ne seront true si obj.length est un nombre réel (pas par exemple une chaîne de caractères qui peuvent être converties en un nombre).

4voto

Irishka Points 912

Je pense que la principale raison pour laquelle ils sont à l'essai si l'obj.la longueur est un nombre - est de différencier les obj type d'Objet à partir de [objet Array] (cela marcherait aussi avec de la Ficelle et de la Fonction des objets). L' [object object] n'a pas de propriété length.

donc, si

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

ce qui concerne

P. S.: de l'OMI, il répond à la deuxième partie de la "pourquoi font-ils l'utiliser" question

2voto

xdazz Points 85907

+obj.length tour obj.length en nombre. Je pense que c'est pour tester si obj.length est un nombre.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X