JavaScript:为什么.forEach不起作用?

时间:2013-05-31 18:00:34

标签: javascript foreach undefined

这是一小段代码:

window.addEventListener('load', function() {
    ['echo'].forEach(function(entity) {
        console.log('loaded entity=' + entity)
    })
})

console.log(['echo'])
console.log(['echo'].forEach)
['echo'].forEach(function(entity) {
    console.log('entity=' + entity)
})

输出如下:

["echo"]
function forEach() { [native code] }
Uncaught TypeError: Cannot read property 'echo' of undefined
loaded entity=echo

为什么会出现此错误?我假设undefined this.forEach.forEach。调用{{1}}时为什么不通过?

3 个答案:

答案 0 :(得分:7)

分号!

window.addEventListener('load', function() {
    ['echo'].forEach(function(entity) {
        console.log('loaded entity=' + entity);
    })
});

console.log(['echo']);
console.log(['echo'].forEach);
['echo'].forEach(function(entity) {
    console.log('entity=' + entity);
});

问题在于:

console.log(['echo'].forEach)
['echo'].forEach(function(entity) {

忽略换行符,它被解析为:

console.log(['echo'].forEach)['echo'].forEach(function(entity) {

console.log()返回undefinedundefined['echo']会引发异常。

所以使用分号并感到高兴。或者不要受苦。

答案 1 :(得分:1)

You need to add semi-colons。您的脚本正在评估为:

console.log(['echo'].forEach)['echo'].forEach(function(entity) {
    console.log('entity=' + entity)
})

由于console.log返回undefined,您会收到未被捕获的TypeError,因为您无法访问echo上的undefined属性。

答案 2 :(得分:0)

Javascript可以在没有分号的情况下工作(将换行视为语句的结尾),只要以下行的连接在语法上是不正确的&解析毫无意义。

例如:

var a=1
var b=2
由于var a=1 var b=2没有意义,因此分号将被添加,

将起作用。

因此它将被视为var a=1; var b=2。类似地,

console.log(['echo'].forEach)
['echo'].forEach(function(entity) {
    console.log('entity=' + entity)
})

读作:

console.log(['echo'].forEach)['echo'].forEach(function(entity) {
    console.log('entity=' + entity)
})

此处console.log(...)被视为具有属性'echo'的对象。因此错误。