JavaScript:为什么[] +( - 〜{} - 〜{} - 〜{} - 〜{})+( - 〜{} - 〜{}); 返回"42"

gec*_*kob 6 javascript

在我的时事通讯中看到了这一点.在Chrome和Firefox上测试过.我还是想不出来.

[]+(-~{}-~{}-~{}-~{})+(-~{}-~{});    //=>  "42"
Run Code Online (Sandbox Code Playgroud)

use*_*018 6

评估:

~{}
Run Code Online (Sandbox Code Playgroud)

使用内部函数进行评估:

~ToInt32({})
Run Code Online (Sandbox Code Playgroud)

给出-1.

参考ECMA规范 - http://www.ecma-international.org/ecma-262/5.1/#sec-9.5 和此解释 - http://jibbering.com/faq/notes/type-conversion/#tcToInt32

因此,在这种情况下

(-~{}-~{}) == 2
(-~{}-~{}-~{}-~{}) == 4
Run Code Online (Sandbox Code Playgroud)

就像你[]+在表达式的开头一样,javascript使用加上像string这样的操作数.所以你有了"" + "4" + "2" = "42"

  • `〜{}`与`~Tentnt32({})`相同,它将`{}`转换为'0`.见http://www.ecma-international.org/ecma-262/5.1/#sec-9.5.在没有引用规范的情况下回答这样的问题是可疑的. (2认同)