这不是JSlint 的重复:意外的 'for' ,请不要将其标记为:
没有用于循环对象或对象文字的本机 for 循环(我知道有一个.forEachfor 数组)。
为什么 jslint 建议不要使用 for 循环?你如何遍历一个对象不具有Array.forEach()或Array.some()或类似的?
但更大更重要的问题是,为什么提出这个建议?
显然我可以使用Object.keys()然后,forEach()但这似乎是一种更长的方法。
源代码
// on a truthy match returns true and breaks from loop
Pub.someKey = function (obj, func, con) {
    var key;
    if (!Pub.isFunction(func)) {
        return false;
    }
    for (key in obj) {
        if (obj.hasOwnProperty(key)) {
            if (func.call(con, obj[key], key, obj)) {
                return true;
            }
        }
    }
    return false;
};
Pub.forSomeKey = Pub.someKey;
我相信您正在寻找的答案链接在您链接的问题的接受答案中: http: //www.jslint.com/help.html#forin
不建议使用 for in 语句。请改用 Object.keys。
它继续解释为什么建议这样做。
for in 语句允许循环遍历对象的所有属性的名称。不幸的是,它还循环遍历通过原型链继承的所有属性。当兴趣在于数据属性时,这会产生提供方法函数的不良副作用。如果在没有意识到这种情况的情况下编写程序,那么它可能会失败。
每个 for in 语句的主体都应该包含在执行过滤的 if 语句中。它可以选择特定类型或值范围,或者可以排除函数,或者可以从原型中排除属性。例如,
Run Code Online (Sandbox Code Playgroud)for (name in object) { if (object.hasOwnProperty(name)) { .... } }请注意,如果对象包含名为 hasOwnProperty 的数据属性,则上述代码将失败。请改用 Object.keys。
| 归档时间: | 
 | 
| 查看次数: | 4362 次 | 
| 最近记录: |