javascript - array.some 可以在未定义的情况下循环吗?

标签 javascript


我有一个用户从这段代码生成 Sentry 报告说 Cannot read property 'values' of undefined

var self = this;
if (self.queue()) {
    return self.queue().some(function (item, index) {
        return item.values[key] == value;
    });
} else {
    return false;
}

self.queue() 是一个可观察到的淘汰赛。 这怎么可能? array.some 是否循环遍历空数组?还是说 some 函数附加到真实数组,并且在循环遍历数组时正在编辑数组?

显而易见的答案是这样做

var self = this;
if (self.queue()) {
    return self.queue().some(function (item, index) {
        if (item && item.values) {
            return item.values[key] == value;
        }else{
            return false;
        }
    });
} else {
    return false;
}

但我看不出我必须这样做的原因。

我使用的 some 功能错了吗?在遍历数组之前是否需要先复制数组?

谢谢

-编辑

根据 GMaiolo 的示例和 Alexey Lebedev 的评论在节点中进行此测试

// let arr = [null, undefined, 0, 'something', undefined, 3]
let arr = [null, , , 'something', , 3]
console.log("test 1:");
for (const value of arr) {
    console.log(value)
}
console.log("\ntest 2:");
arr.forEach(function(item){
    console.log(item);
});
console.log("\ntest 3:");
arr.some(function(item){
    console.log(item);
    return false;
});

结果

test 1:
null
undefined
undefined
something
undefined
3

test 2:
null
something
3

test 3:
null
something
3

在节点 8.11 中测试

最佳答案

undefinednull 值在其位置上仍然是数组的元素,因此,回答特定问题:

Array.some将遍历充满 undefined 元素的数组。


也就是说,我们可以使用 Array.values 来检验我刚才所说的内容:

let arr = [null, undefined, 0, 'something', undefined, 3]
const iterator = arr.values()

for (const value of iterator) {
  console.log(value) // output: null, undefined, 0, "something", undefined, 3
}

关于javascript - array.some 可以在未定义的情况下循环吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50821478/

相关文章:

javascript - 如果没有返回语句,Flask session 不会保留由 ajax 设置的值

javascript - 类变量在 JavaScript 中返回 undefined

javascript - 如何获取与复选框关联的文本

javascript - 从数字返回一个唯一且排序的字符串

javascript - 检查 Javascript 中节点是否存在

javascript - 预加载动画隐藏了所有很酷的 slider 介绍动画

javascript - 未捕获的类型错误 : layer. onAdd 不是函数

javascript - 创建一个新的 Maven 目标来运行 Jasmine 测试

javascript - 对 Chart.JS 设置限制

javascript - 在HTML表单中添加JavaScript计算功能