Mentre scavare nel codice sorgente della libreria sottolineatura, ho trovato su che _.each
si basa su un ECMAScript 5 API Array.forEach
ogniqualvolta disponibili:C'è un motivo per cui jQuery.each non si basa su Array.forEach quando è disponibile?
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 (iterator.call(context, obj[i], i, obj) === breaker) {
return;
}
}
} else {
for (var key in obj) {
if (_.has(obj, key)) {
if (iterator.call(context, obj[key], key, obj) === breaker) {
return;
}
}
}
}
};
ho notato che jQuery.each (quello statico, non il metodo di una .each jQuery wrapper) fa solo un tradizionale for
che chiama la funzione di callback, non importa se forEach
è disponibile o meno. C'è una ragione per quello che ho perso?
jQuery è un oggetto, non un array. Dovresti convertire avanti e indietro tra un array e l'oggetto nodeList-like per essere in grado di concatenare la chiamata jQuery per utilizzare il metodo Array. – kennebec
@kennebec Sto parlando di $ .each(), non .each(). Ho modificato la domanda per renderla più chiara. –
Una possibile spiegazione è che '.each()' di jQuery non ha esattamente la stessa interfaccia di '.forEach', quindi i due non sono intercambiabili. Se jQuery avesse prima implementato la propria implementazione, avrebbe dovuto interrompere/modificare la propria API per poter utilizzare .for Anyach when present. – jfriend00