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?
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?
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.
Ce test s' obj
s' 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).
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
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.