为什么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".
我知道先执行+[]
,然后转换成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".