javascript - 不存在的分号
问题描述
alert("There will be an error")
[1, 2].forEach(alert)
现在,如果我运行代码,只显示第一个警报,然后出现错误!我知道为什么我们有一个错误(没有自动分号插入),但我不明白错误消息:未捕获的类型错误:无法读取未定义的属性 '2'。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]
不会被评估为一个数组,即使它看起来像一个。
推荐阅读
- r - 计算具有相邻值的行组之间的统计差异
- html - 居中 React-Grid-Gallery ReactJS 库
- javascript - Microsoft.Maps.TileSource 回调的凭据
- c# - 将XML转成JSON反序列化成类
- epoch - Epoch 秒到日期/时间转换,不使用 C 库函数
- sql - 如何使用多选优化 SQL 查询
- python - 将基于公共索引的数据与日期结合起来
- floating-point - IEEE 754 标准中的零点一
- rasa-nlu - 如何使用 rasa action_restart
- sql - SQL Developer - 我如何让 MAX 和 AVG 从一列中提取并过滤它们自己?