我的用户正在使用此代码生成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中测试
答案 0 :(得分:3)
undefined
或null
值仍然是其位置的数组元素,因此,回答特定问题:
是,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
}