JavaScript中的半刚性强制
有人能帮我解开下面这句话的谜团吗:JavaScript中的半刚性强制,javascript,Javascript,有人能帮我解开下面这句话的谜团吗: ++[[]][+[]]+[+[]] 我的理解 从左到右: ++[[]]:不确定这将计算为什么以及如何计算 [+[]]:首先执行+[],一元运算符将尝试将[]转换为数字。因此0。因此[+[]的输出将是[0] [+[]]+[+[]]:等于[0]+[0]。这里将调用数组的toString()方法,输出为“00” 基本上,我无法理解最左边的表达式,即+[[]][+[]]]转换为[0] +[[]][+[]]转换为1 而1+[0]在javascript中等于“10”
++[[]][+[]]+[+[]]
我的理解
从左到右:
:不确定这将计算为什么以及如何计算++[[]]
:首先执行+[],一元运算符将尝试将[]转换为数字。因此0。因此[+[]的输出将是[0][+[]]
:等于[0]+[0]。这里将调用数组的toString()方法,输出为“00”[+[]]+[+[]]
基本上,我无法理解最左边的表达式,即
+[[]]
[+[]]]
转换为[0]
+[[]][+[]]
转换为1
而1+[0]
在javascript中等于“10”
++[[]][+[]]+[+[]]
表达式将分成两部分,如下所示
和+[[]][+[]]
[+[]]
[+[]]
的计算结果为[0]
(正如您已经了解的那样)
接下来考虑
+[[]][0]
[[]]
是一个数组,其中包含一个数组作为其元素。因此[[]][0]
计算为已在内存中分配的[]
现在,由于0元素数组已在内存中分配,因此在进行数学运算时,它将转换为0
,因此,当使用++
运算符递增时,具有0元素数组的内存位置将获得新值1
因此,+[[]][+[]]
最终计算为1
现在它的
1+[0]
即1+[0].toString()
即1.toString()+“0”
即“1”+“0”
即10
唯一真正的答案是“仔细阅读规范”。为什么不研究一下这一个现实的、有用的例子呢,而不是这个发明?因为你应该把它缩小到你不了解的特定部分。你应该证明你已经尝试了一些东西,而不仅仅是在你的facebook上发布给别人回答。好吧,现在这看起来更合理了。我对“如何”部分感兴趣使js引擎认为您正在将0添加到一个数组中,该数组将其转换为数字(0)。请解释+[[]][+[]]
如何计算为1
。剩下的现在已经很清楚了。++
通常等同于+1
,0+1
是1
,谢谢@Rajesh的解释。明白了。@AnupVasudeva,即使你问这个问题,这对我来说也是一团糟。但后来,当我在控制台中测试时,这个概念已经足够清晰,可以解释了。很高兴我的想法有用。谢谢你提出这个问题+问题1。