Pregunta sobre la implementación de la función "cada" que encontré en el código fuente de underscore.js (fuente a continuación).cada implementación en la biblioteca underscore.js
En primer lugar, alguien podría explicar qué es lo que la línea "else if (obj.length === + obj.length)" está buscando.
En segundo lugar, ¿alguien podría explicar por qué se usa hasOwnProperty.call (obj, key), en oposición a obj.hasOwnProperty? ¿Es porque el obj aprobado no puede implementar hasOwnProperty (que pensé que todos los objetos javascript)
se apreciaron las ideas. Gracias.
// The cornerstone, an `each` implementation, aka `forEach`.
// Handles objects with the built-in `forEach`, arrays, and raw objects.
// Delegates to **ECMAScript 5**'s native `forEach` if available.
var each = _.each = _.forEach = function(obj, iterator, context) {
if (obj == null) return;
if (nativeForEach && obj.forEach === nativeForEach) {
obj.forEach(iterator, context);
} else if (obj.length === +obj.length) {
for (var i = 0, l = obj.length; i < l; i++) {
if (i in obj && iterator.call(context, obj[i], i, obj) === breaker) return;
}
} else {
for (var key in obj) {
if (hasOwnProperty.call(obj, key)) {
if (iterator.call(context, obj[key], key, obj) === breaker) return;
}
}
}
};
'+ obj.length' es el operador javascript unary add. ver: http://xkr.us/articles/javascript/unary-add/ – mikeycgto
Entonces, ¿la declaración es un cheque para asegurarse de que la propiedad de longitud de obj es en realidad un número? – user772110
la declaración '+ obj.length' convierte' obj.length' a un número – mikeycgto