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
我在 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