为什么在JavaScript中未定义“ [] [[]]”

Ade*_*ayo 4 javascript arrays undefined

我们钟爱的JavaScript可能很奇怪...

(![] + [])[+!+[] + +!+[]]                // 'l'
    + (![] + [])[+!+[]]                  // 'a'
    + ([![]] + [][[]])[+!+[] + [+[]]]    // 'i'
    + ([][[]] + [])[+!+[] + +!+[]]       // 'd'
 // Will output "laid"
Run Code Online (Sandbox Code Playgroud)

JavaScript产生此输出的原因主要取决于数组的类型转换和+将“事物”转换为字符串的能力。![] // false+[] // 0我的问题是JavaScript如何成功解析[][[]]未定义但被拒绝[][][]为语法错误

Que*_*tin 6

[] 根据上下文的含义不同

[][[]]
Run Code Online (Sandbox Code Playgroud)

第一个[]创建一个新数组(数组文字语法)。

然后that_array[[]]尝试从该数组读取属性(方括号属性访问器语法)。

属性名称是[](也是数组文字语法),它是一个数组,被转换为字符串:''

由于没有名为空字符串的属性,因此解析为undefined

换一种说法:

const array = [];
const propertyName = [].toString();
console.log(array[propertyName]);
Run Code Online (Sandbox Code Playgroud)
[][][]
Run Code Online (Sandbox Code Playgroud)

出现此错误的原因是,当第一个[]创建数组时,第二个[]尝试从中访问属性,但未包含属性名称的值。它]在值之前,因此第二个]是意外的。它永远不会到达第三位[]