有人可以帮助我揭开以下表达的神秘面纱:
++[[]][+[]]+[+[]]
我的理解 从左到右:
++[[]]
:不确定这将评估什么以及如何评估。[+[]]
:首先执行+ [],一元运算符将尝试将[]转换为数字。因此0.因此[+ []]的输出将为[0]。[+[]]+[+[]]
:等于[0] + [0]。这里将调用数组的toString()方法,输出将为“00”。基本上我无法理解最左边的表达,即++[[]]
答案 0 :(得分:4)
++[[]][+[]]+[+[]]
表达式将分为两部分,如下所示
++[[]][+[]]
和[+[]]
现在[+[]]
评估为[0]
(正如您已经了解的那样。)
接下来考虑等同于++[[]][+[]]
的{{1}}:
步骤(处理)
++([[]][+[]])
现在++[[]][0]
是一个包含单个数组作为其元素的数组。因此[[]]
计算已经在内存中分配的[[]][0]
。
现在因为0元素数组已经在内存中分配,因此在数学运算时它被转换为[]
,因此当使用{{1}递增时,内存位置具有0元素数组运算符内存位置获取新值1.
所以0
最终评估为++
。
现在是++[[]][+[]]
,即1
,即1+[0]
,即1+[0].toString()
,即 1.toString()+"0"
。
答案 1 :(得分:0)
[+[]]
转换为[0]
++[[]][+[]]
转换为1
1 + [0]
等于javascript中的"10"