今天我写了一些编程竞赛的代码。当我运行它时,我因错误而感到惊讶。 在看起来像“无错误空间”的地方无法读取未定义的属性“ forEach” 。
sum = 0
[-1,0,1].forEach(deltar =>{...});
在sum
变量值赋值代码开始起作用后添加分号时。
sum = 0;
[-1,0,1].forEach(deltar =>{...});
对于 JS 的行为很好奇,这里的解释器不匹配是什么? JS 如何与整数和数组混淆?
这里是完整的变量声明代码功能的完整代码。
function boxBlur(img) {
let [h,w] = [img.length-1,img[0].length-1];
let [answer,sum,tmp] = [[],0,[]]
for(let row = 1; row < h; row += 1){
tmp = []
for(let clmn = 1; clmn < w; clmn += 1){
sum = 0;
[-1,0,1].forEach(deltar =>{
[-1,0,1].forEach(deltac =>{
sum += img[row+deltar][clmn+deltac]
});
});
tmp.push(parseInt(sum/9));
}
answer.push(tmp);
}
return answer;
}
答案 0 :(得分:3)
问题在于,当您不放置分号时,它不会自动放置;
3
。 [1,2,3]
不能用作数组,而可以用作Bracket Notation。 3
。0[3]
是undefined
。undefined.forEach(){...}
显然会引发错误。
let sum = 0
[1,2,3]
console.log(sum)
答案 1 :(得分:3)
Nodejs version: 8.12.0
React version: 16.8.3
React Native version: 0.59.5
react-native-gifted-chat version: 0.8.0
Platform: Android
如此
1,2,3 === 3
因此
[1,2,3] -> [3] i.e. is property named 3
因为Number(0)没有称为3的属性
以进一步说明
sum = 0[3] is undefined -
现在代码等同于
var sum = 0
[1,2,3,'constructor']
console.log(sum);
或
var sum = 0['constructor']
在控制台中看到的是var sum = 0..constructor
对象构造函数