Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript中的半刚性强制_Javascript - Fatal编程技术网

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]
(正如您已经了解的那样)

接下来考虑>+[[]][+]]/Cord>,相当于<代码> +[[[]][+]] :

步骤(过程)

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