微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

javascript – JQuery和Underscore“每个”保证数组的顺序?

我在 Javascript上阅读:Good Parts …

Since JavaScript’s arrays are really objects,the for in statement can be used to iterate over all of the properties of an array. Unfortunately,for in makes no guarantee about the order of the properties…

据我所知,“每个”功能都是基于in,那么JQuery和Underscore库中的每个函数是否会在数组迭代时保证顺序?我试图避免令人讨厌的标准.

先谢谢你.

解决方法

当迭代数组时,总是保证顺序.当你不经过重复(非数组)对象是没有保证的时候.数组依然是对象.

每个都不是一个for for for对象,而是用于数组类.该框架确定作业的正确循环并且应用相同的逻辑:数组迭代是有序的,而对象迭代不是.

下划线的来源:

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的来源:

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],object[i++]) === false) {
                    break;
                }
            }
        }
    }
    return object;
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐