JS数组字面量遗漏逗号为何可正常编译?
为什么漏写逗号却没报错?
这是因为JavaScript的语法把漏写逗号的地方解析成了数组属性访问+逗号运算符的组合,具体拆解如下:
先看漏写逗号的两行:
[1, 2, 3][4, 5, 6]- 首先,
[4, 5, 6]里的逗号是逗号运算符,它会依次执行每个表达式,最终返回最后一个值,也就是6。 - 然后,
[1, 2, 3]是一个数组,后面跟[6]属于访问数组的索引6对应的元素。但这个数组只有3个元素(对应索引0、1、2),索引6不存在,所以返回undefined。
- 首先,
因此你的整个数组初始化代码被JavaScript解析成了:
amIMissingSomething = [ undefined, // 来自[1,2,3][4,5,6]的执行结果 [7, 8, 9] ]这就解释了为什么
console.log会输出[undefined, [7, 8, 9]]。
本质上是JavaScript允许表达式直接跟属性访问语法,再加上逗号运算符的特性,让漏写逗号的代码没有触发语法错误,反而被解析成了另一种合法的表达式逻辑。
内容的提问来源于stack exchange,提问作者Colby King
相关产品推荐
相关产品推荐

