{1 + ''} + 10 // 10
{1 + ''} + '' // 0
为什么会这样? BlockStatements是否返回0,为什么?
答案 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。