JavaScript BlockStatement混乱

时间:2012-03-21 11:21:03

标签: javascript

{1 + ''} + 10 // 10
{1 + ''} + '' // 0

为什么会这样? BlockStatements是否返回0,为什么?

1 个答案:

答案 0 :(得分:12)

  

BlockStatements是否返回0 ......?

不,blocks返回其中最后一个表达式的值。你可以通过以下方式看到这一点:

{1 + 8}

...在JavaScript控制台中,将显示9

  

{1 + ''} + 10 // 10   
{1 + ''} + '' // 0   
为什么会这样?

因为尽管块确实返回了值,但不使用该值。 {1 + ''} + 10 // 10代码被评估为两个不同的项目:

{1 + ''} // "1"
+10      // 10

...或用标准缩进和分号书写那些:

{
    1 + '';
}
+10;

......你看到了第二个结果,好像第一个根本就没有。 +没有加法运算符,它是unary +(类似于unary -,但它不会更改其操作数的符号)。 +10当然是10; +''0,因为将字符串应用于字符串会将字符串转换为数字,Number('')0

您可以通过尝试来证明您正在看到一元+而不是加法运算符:

{1 + ''} * 10

......这真的是

{
    1 + '';
}
*10;

因语法错误而失败,因为没有一元*

正如Felix在下面的评论中指出的那样,对于你的示例中的+是加法运算符(在你的情况下最终会连接字符串),它必须是between two expressions,而阻止是statement,而不是expression