Javascript 中的换行符及其对字符串连接的影响

Newlines and their effect in String concatenation in Javascript

我在 JavaScript 工作时遇到了一个非常奇怪的情况,我花了一些时间在我的项目中修复了这个问题,但我也可以复制它。

问题是关于通过串联解析多行字符串。

我的测试用例如下:

> var a = "s1"
undefined
> var b = "s2"
undefined
> a + b
's1s2'
> a+
... +b
's1NaN'
> a++b
SyntaxError: Unexpected identifier

(其中第二个基本上是单个命令 a++b,在 a+ 和 +b 之间有一个换行符)。

第二个测试用例不应该和第三个测试用例完全一样吗? Chrome 39 和 Firefox 34 都会发生这种情况。

这种行为是否符合标准?我是否遗漏了一些我没有考虑的明显的东西?

a+
+b

实际上被视为

a + (+b)

由于 b 不是数字,因此 b 的数值由一元 + 运算符给出为 NaN

在最后一种情况下,a++b,它被评估为(a++)b。由于 JavaScript 在 ++ 运算符之后没有任何期望,因此它失败并显示错误

SyntaxError: Unexpected identifier