Javascript 是否可以在未定义的?
我有一个用户正在根据此代码生成Sentry报告,说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()。 这怎么可能?是否执行数组。某些在空数组中循环?或者是
无法读取未定义的属性“值”
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
}