Javascript 是否可以在未定义的?

Javascript 是否可以在未定义的?,javascript,Javascript,我有一个用户正在根据此代码生成Sentry报告,说无法读取未定义的属性“值” var self = this; if (self.queue()) { return self.queue().some(function (item, index) { return item.values[key] == value; }); } else { return false; } self.queue()。 这怎么可能?是否执行数组。某些在空数组中循环?或者是

我有一个用户正在根据此代码生成Sentry报告,说
无法读取未定义的属性“值”

var self = this;
if (self.queue()) {
    return self.queue().some(function (item, index) {
        return item.values[key] == value;
    });
} else {
    return false;
}
self.queue()。
这怎么可能?是否执行
数组。某些
在空数组中循环?或者是观察到的
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;
}
但我看不出我为什么要这么做

我是否使用了
某些
功能错误?我是否需要先复制阵列,然后再遍历它

谢谢

-编辑

根据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中测试一个
未定义的
null
值,它仍然是一个数组的元素,因此,回答特定问题:

,将在填充
未定义元素的数组上循环


话虽如此,我们可以通过以下方式验证我刚才所说的内容:


也有可能数组包含您认为它不包含的内容<代码>如果(项目){
不能阻止你的错误。如果
项目
没有
属性,或者
为空
,同样的错误很好,如果一个可以发生,另一个也可以,我会编辑好的,这是一个游戏改变者…应用程序到处都有循环。谢谢你的帮助。但不是稀疏元素。尼娜说,
一些(x=>控制台.log(x))< /> >不会在中间遍历<代码>未定义< /代码>。@ AlexeyLebedev在回答中不完全是真的。一个<代码>(conr value)AR/{代码>将循环通过它们,但是<代码> AR.FEACACH(函数(项){<代码/代码>和代码> ARR.一些(函数)(项){
不会。我在问题中添加了测试代码。这并不直接相关,因为应用程序使用forEach everywhere(es5支持),但有趣的是循环的功能不同。
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
}