为什么javascript表达式'[[][[]]+[]][+[]][++[+[]][+[]]]'的结果是'n'?

Why javascript expression '[[][[]]+[]][+[]][++[+[]][+[]]]' result is 'n'?

我知道先执行+[],然后转换成0

所以表达式变成

[[][[]]+[]][0][++[0][0]]

那我觉得++优先级高,但是++[0]好像不合法

那为什么最后的结果是n

巴甫洛夫式的回应,我只需要解决它。 :-)

由内而外:

[    [][[]]+[]    ][0][    ++[0][0]    ]

先取[][[]]+[][]是一个空数组。它后面的 [[]] 是 属性 访问器。所以内部 [] 被强制转换为字符串 ""[][""]undefined(在名称为 "" 的数组上没有 属性。)采用 undefined + [] 将两边都强制转换为字符串并得到 "undefined".所以现在我们有:

[    "undefined"    ][0][    ++[0][0]    ]

下一部分相当明显:["undefined"][0]"undefined”。所以现在我们有:

"undefined"[    ++[0][0]    ]

让我们做那个 属性 访问器,++[0][0][0] 是一个包含 0 的数组。 [0] 在索引到它之后,所以我们递增数组索引 0(即 0)处的条目使其成为 1。

所以现在我们有:

"undefined"[1]

...即 "n".