首页 > 解决方案 > 不存在的分号

问题描述

alert("There will be an error")
[1, 2].forEach(alert)

现在,如果我运行代码,只显示第一个警报,然后出现错误!我知道为什么我们有一个错误(没有自动分号插入),但我不明白错误消息:未捕获的类型错误:无法读取未定义的属性 '2'。JavaScript 解释器如何读取这段代码?

标签: javascript

解决方案


当您拥有<expression>[...]时,解释器将尝试在 上查找属性expression。当括号内包含逗号时,您将调用逗号运算符,它的计算结果为列表中最后一项的值。所以

foo[1, 2]

相当于

foo[2]

这正是这里发生的事情:

alert("There will be an error")
[1, 2].forEach(alert)

相当于

alert("There will be an error")
[2].forEach(alert)

相当于

alert("There will be an error")[2].forEach(alert)

相当于(没有alert消息)

undefined[2].forEach(alert)

这就是“2”的由来。alert返回undefined,所以错误信息是Uncaught TypeError: Cannot read property '2' of undefined

[1, 2]不会被评估为一个数组,即使它看起来像一个。


推荐阅读