javascript - underscore.js every() 未定义

标签 javascript underscore.js

我写了一些这样的代码:

var a = new Array(10); // should be [undefined * 10] 
var b = _.every(a, function(m){
    if(_.isUndefined(m)){
        return false;
    }
    return true;
});

我预计 b 为“假”,但它返回“真”。 为什么返回“true”?

然后,我改成这样:

var c = [undefined, undefined];
var d = _.every(c, function(m){
    if(_.isUndefined(m)){
        return false;
    }
    return true;
});

它在 d 中返回 'false'。

为什么它们不同?

您可以在 http://jsfiddle.net/3qj4B/3/ 中对此进行测试

最佳答案

当您使用类初始值设定项创建一个数组时,您正在创建一个具有 10 个可用内存空间的数组,但它们都没有被初始化。所以你没有循环任何东西。

现在看看every的源码:

_.every = _.all = function(obj, iterator, context) {
    iterator || (iterator = _.identity);
    var result = true;
    if (obj == null) return result;       
    if (nativeEvery && obj.every === nativeEvery) return obj.every(iterator, context);
    each(obj, function(value, index, list) {
      if (!(result = result && iterator.call(context, value, index, list))) return breaker;
    });
    return !!result;
};

result 设置为 true 并返回,因为 each 没有迭代。这就是您要返回 true 的原因。

如果在您的 fiddle 中,您尝试在处理程序中添加 console.log(m),您将在控制台中看不到任何日志,因为 each 迭代 0次。

关于javascript - underscore.js every() 未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19297874/

相关文章:

javascript - 过滤带下划线的对象数组并获取新的值数组

javascript - 如何简化和加速_.each?

javascript - 动态添加的事件处理程序会禁用 JavaScript 中的前一个事件处理程序

javascript - 图像在多图像 slider 中显示两次

javascript - 如何在vue模板中按行分割内联JS表达式?

javascript - 更改当前按钮元素的类

javascript - Underscore.js 查找对象数组中的唯一值;返回唯一项目及其数量

javascript - 如何在 underscore.js 中获取数组对象键的总和?

javascript - 在 console.log 中打印 Javascript 对象时的不同行为

javascript - AngularJS 多次定义 angular.module()