yo estaba buscando en el código fuente de la biblioteca Underscore.js, específicamente para el método map (alrededor de la línea 85 en esa página, y copiado aquí):longitud de objeto negativo posible en JavaScript o underscore.js? ¿sentido?
_.map = 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;
};
completamente sencilla a excepción de la siguiente línea
if (obj.length === +obj.length) results.length = obj.length;
Ahora, leo esto para decir "si la longitud del objeto no es un número negativo ..."
que, si mi interpretación es correcta, implica que podría ser!
Así que, queridos expertos, para qué tipo de objetos podrían
obj.length === +obj.length
ser false
? Mi comprensión de ===
significa que podría devolver false
si el tipo de no coincidía con el tipo de +obj.length
, pero aquí mi conocimiento se queda corto. ¿Qué tipo de cosas podría hacer +
a los tipos de cosas que podría ser? ¿Es x === +x
algún tipo de prueba idiomática genérica que simplemente no sé? ¿Es la respuesta a algún tipo de caso especial que surge más profundo en underscore.js, por ejemplo, underscore.js asigna y rastrea object.lengths negativo para algún propósito convencional? La orientación y el asesoramiento serán muy apreciados.
Tenga en cuenta que '+ x' es * no * necesariamente positivo, es solo el valor numérico de' x'. Entonces, si 'var x = -10',' + x' también es '-10'. –
Sí, date cuenta de que + x no hizo nada con el valor de x (no lo incrementó temporalmente para la comparación). – grantwparks