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

时间:2018-02-23 10:33:07

标签: javascript operators expression

我知道首先执行+[],然后将其转换为0

因此表达式变为

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

然后我认为++具有高优先级,但++[0]似乎是非法的

那么为什么最终结果是n

1 个答案:

答案 0 :(得分:2)

巴甫洛夫回应,我不得不解决这个问题。 : - )

从内到外开始:

[    [][[]]+[]    ][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"。