TypeError: Cannot read property 'forEach' of undefined Javascript
TypeError: Cannot read property 'forEach' of undefined Javascript
以下是我得到 Cannot read property 'forEach' of undefined
.
的代码
const print2 = function(x, y) {
console.log(x*y)
}
[1,2,3,4].forEach( x => print2(x, 20) )
让我知道我在这里做错了什么,尽管如果我这样做 -
function print2(x, y) {
console.log(x*y)
}
[1,2,3,4].forEach( x => print2(x, 20) )
这工作正常。
由于函数后没有分号,因此代码段被解释为:
const print2 = function(x, y) {
console.log(x*y)
}[1,2,3,4].forEach( x => print2(x, 20) )
这意味着它正在尝试对函数进行索引。在函数之后或数组文字之前添加一个分号:
const print2 = function(x, y) {
console.log(x*y)
};
[1,2,3,4].forEach( x => print2(x, 20) )
或
const print2 = function(x, y) {
console.log(x*y)
}
;[1,2,3,4].forEach( x => print2(x, 20) )
更多关于 Javascript 的自动分号插入:JavaScript 的自动分号插入 (ASI) 的规则是什么?
您在 FunctionExpression
后缺少分号。
const print2 = function(x, y) {
console.log(x*y)
}
[1,2,3,4].forEach( x => print2(x, 20) )
改为
const print2 = function(x, y) {
console.log(x*y)
};
[1,2,3,4].forEach( x => print2(x, 20) )
而且有效。
你需要在变量声明的末尾有一个分号。
const print2 = function(x, y) {
console.log(x*y)
};
[1,2,3,4].forEach( x => print2(x, 20) )
没有分号,它被视为
const print2 = function(x, y) {
console.log(x*y)
}[1,2,3,4].forEach( x => print2(x, 20) )
[1,2,3,4]
被解释为 属性 访问器,而不是数组,逗号运算符 returns 是最后一个值 4
。由于该函数没有 4
属性,即 returns undefined
,然后您尝试调用 .forEach()
。
我认为,您应该使用 array.forEach(x => print2(x, 20));
这样的变量,而不是 [1,2,3,4].forEach( x => print2(x, 20) )
例如下面给出的示例代码:
let array = [1,2,3,4];
const print2 = function(x, y) {
console.log(x*y);
};
array.forEach( x => print2(x, 20) );
备案。
我想补充一点,我在使用该代码时遇到了同样的错误
var createFiltersList = function() {
window.filterMenu.forEach(function(text) { /* <== error here */
filterList.push({
text: text,
expr: text !== ALL ? [DevAV.filterField, "=", text] : null,
type: DevAV.filterCaption,
custom: false
});
});
var customItems = JSON.parse(window.localStorage.getItem(storageKey));
Array.prototype.push.apply(filterList, customItems);
};
我的问题是我没有为 window.filterMenu 设置任何值,因此 filterMenu 为 null,因此 forEach 不适用于 null。
一旦为 filterMenu 设置了一个值数组,错误就消失了。
以下是我得到 Cannot read property 'forEach' of undefined
.
const print2 = function(x, y) {
console.log(x*y)
}
[1,2,3,4].forEach( x => print2(x, 20) )
让我知道我在这里做错了什么,尽管如果我这样做 -
function print2(x, y) {
console.log(x*y)
}
[1,2,3,4].forEach( x => print2(x, 20) )
这工作正常。
由于函数后没有分号,因此代码段被解释为:
const print2 = function(x, y) {
console.log(x*y)
}[1,2,3,4].forEach( x => print2(x, 20) )
这意味着它正在尝试对函数进行索引。在函数之后或数组文字之前添加一个分号:
const print2 = function(x, y) {
console.log(x*y)
};
[1,2,3,4].forEach( x => print2(x, 20) )
或
const print2 = function(x, y) {
console.log(x*y)
}
;[1,2,3,4].forEach( x => print2(x, 20) )
更多关于 Javascript 的自动分号插入:JavaScript 的自动分号插入 (ASI) 的规则是什么?
您在 FunctionExpression
后缺少分号。
const print2 = function(x, y) {
console.log(x*y)
}
[1,2,3,4].forEach( x => print2(x, 20) )
改为
const print2 = function(x, y) {
console.log(x*y)
};
[1,2,3,4].forEach( x => print2(x, 20) )
而且有效。
你需要在变量声明的末尾有一个分号。
const print2 = function(x, y) {
console.log(x*y)
};
[1,2,3,4].forEach( x => print2(x, 20) )
没有分号,它被视为
const print2 = function(x, y) {
console.log(x*y)
}[1,2,3,4].forEach( x => print2(x, 20) )
[1,2,3,4]
被解释为 属性 访问器,而不是数组,逗号运算符 returns 是最后一个值 4
。由于该函数没有 4
属性,即 returns undefined
,然后您尝试调用 .forEach()
。
我认为,您应该使用 array.forEach(x => print2(x, 20));
[1,2,3,4].forEach( x => print2(x, 20) )
例如下面给出的示例代码:
let array = [1,2,3,4];
const print2 = function(x, y) {
console.log(x*y);
};
array.forEach( x => print2(x, 20) );
备案。 我想补充一点,我在使用该代码时遇到了同样的错误
var createFiltersList = function() {
window.filterMenu.forEach(function(text) { /* <== error here */
filterList.push({
text: text,
expr: text !== ALL ? [DevAV.filterField, "=", text] : null,
type: DevAV.filterCaption,
custom: false
});
});
var customItems = JSON.parse(window.localStorage.getItem(storageKey));
Array.prototype.push.apply(filterList, customItems);
};
我的问题是我没有为 window.filterMenu 设置任何值,因此 filterMenu 为 null,因此 forEach 不适用于 null。 一旦为 filterMenu 设置了一个值数组,错误就消失了。