这是一小段代码:
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}}时为什么不通过?
答案 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()
返回undefined
,undefined['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'
的对象。因此错误。