揭开JavaScript中的强制神秘面纱

时间:2013-12-30 19:30:03

标签: javascript

有人可以帮助我揭开以下表达的神秘面纱:

++[[]][+[]]+[+[]]

我的理解 从左到右:

  • ++[[]]:不确定这将评估什么以及如何评估。
  • [+[]]:首先执行+ [],一元运算符将尝试将[]转换为数字。因此0.因此[+ []]的输出将为[0]。
  • [+[]]+[+[]]:等于[0] + [0]。这里将调用数组的toString()方法,输出将为“00”。

基本上我无法理解最左边的表达,即++[[]]

2 个答案:

答案 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"