我写了一些这样的代码:
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/