Qu'est-ce que unary + utilisé pour Javascript?

J'ai trouvé un code de Underscore.js

_.map = _.collect = function(obj, iterator, context) { var results = []; if (obj == null) return results; if (nativeMap && obj.map === nativeMap) return obj.map(iterator, context); each(obj, function(value, index, list) { results[results.length] = iterator.call(context, value, index, list); }); if (obj.length === +obj.length) results.length = obj.length; return results; }; 

J'aimerais savoir if (obj.length === +obj.length) fait?

+length est une méthode pour convertir n'importe quoi en un nombre.

Si c'est un nombre, la valeur ne change pas et la comparaison retourne vraie.
Si ce n'est pas un nombre, l'affirmation est fausse.

C'est l'opérateur unary +. Ce site Web a un excellent article sur ses utilisations avec les différents types de données en javascript.

http://xkr.us/articles/javascript/unary-add/

Je vais voler l'introduction, mais il vaut vraiment la peine de lire si vous êtes en javascript.

En JavaScript, il est possible d'utiliser l'opérateur + seul avant un seul élément. Cela indique une opération mathématique et tente de convertir l'élément en un nombre. Si la conversion échoue, elle évaluera à NaN. Ceci est particulièrement utile lorsque l'on veut convertir une chaîne en un nombre rapidement, mais peut également être utilisé sur un ensemble sélectionné d'autres types.

L'opérateur unary +, lorsqu'il est utilisé sur des types autres que la chaîne, essayera en interne d'appeler valueOf () ou toString () (dans cet ordre), puis tentera de convertir le résultat en un nombre. Ainsi, l'opérateur unary + peut convertir avec succès plusieurs types JS natifs avec certaines restrictions:

Ceci est un test, si obj.length est un nombre.

Faire une opération arithmétique sur une chaîne le convertit en entier (et + est une opération unaire … ce qui ne fait rien :-)), et === l'opérateur effectue une comparaison de type

a === b <=> (a == b) && (typeof a) == (typeof b)

Je vais vous suggérer d'essayer ceci

Console.log (typeof + "3") = nombre

Console.log (typeof "3") = chaîne

Cela rend tout clair.