gpt4 book ai didi

javascript - underscore.js every() 未定义

转载 作者:行者123 更新时间:2023-11-30 10:26:37 25 4
gpt4 key购买 nike

我写了一些这样的代码:

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com