JS 数组文字中缺少逗号 - 为什么可以编译?

Col*_*ing 7 javascript

我忘记了在 JavaScript 中初始化二维数组的逗号,令我惊讶的是,它编译了。例如:

amIMissingSomething = [
    [1, 2, 3]
    [4, 5, 6],
    [7, 8, 9]
]

console.log(amIMissingSomething) // [undefined, [7, 8, 9]]
Run Code Online (Sandbox Code Playgroud)

我预计会发生语法错误。然而,经过很长一段时间,我了解到这是有效的 javascript 并且计算结果为:[undefined, [7, 8, 9]]。这里发生了什么?

Zac*_*iah 7

它被解析为:

amIMissingSomething = [
    [1,2,3][4,5,6],
    [7,8,9]
]
Run Code Online (Sandbox Code Playgroud)

逗号运算符返回最后一个表达式,因此基本上:

amIMissingSomething = [
    [1,2,3][6],
    [7,8,9]
]
Run Code Online (Sandbox Code Playgroud)

由于第一个数组没有 7 个元素,因此其计算结果为undefined


Kon*_*owy 5

它被解释为array[index]

请参阅属性访问器

const a = [1, 2, 3][0]

console.log(a)
Run Code Online (Sandbox Code Playgroud)

表达式的结果4, 5, 6是6,参见逗号运算符

const arrayChangeHandler = {
  get: function(target, property) {
    console.log('getting ' + property + ' for ' + target);
    return target[property];
  },
};

const originalArray = [1, 2, 3];
const proxyToArray = new Proxy( originalArray, arrayChangeHandler );

proxyToArray[4, 5, 6]
Run Code Online (Sandbox Code Playgroud)