Bir diziden yinelediğinizde, sipariş her zaman garanti edilir. Bu, (dizi olmayan) nesneler boyunca yinelediğinizde, hiçbir garanti olmadığında ortaya çıkar. Diziler hala yoldalar.
each
dizisi benzeri bir nesne için for in
ve for
daha fazla değildir. çerçeve, iş için doğru döngüyü belirler ve aynı mantık geçerlidir: Nesne yineleme yapılmıyorken, dizi yinelemeleri düzenlidir.
alt çizgi kaynak:
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 (_.has(obj, key)) {
if (iterator.call(context, obj[key], key, obj) === breaker) return;
}
}
}
};
jQuery'nin kaynak:
each: function (object, callback, args) {
var name, i = 0,
length = object.length,
isObj = length === undefined || jQuery.isFunction(object);
if (args) {
if (isObj) {
for (name in object) {
if (callback.apply(object[name], args) === false) {
break;
}
}
} else {
for (; i < length;) {
if (callback.apply(object[i++], args) === false) {
break;
}
}
}
// A special, fast, case for the most common use of each
} else {
if (isObj) {
for (name in object) {
if (callback.call(object[name], name, object[name]) === false) {
break;
}
}
} else {
for (; i < length;) {
if (callback.call(object[i], i, object[i++]) === false) {
break;
}
}
}
}
return object;
}
Bir Array öğesinin ne olduğunu ve bir Nesnenin JavaScript'te neler olduğunu netleştirdiğinizden emin olun ... – Pointy