JavaScript将数字串联为字符串

时间:2014-04-09 17:14:28

标签: javascript string syntax operators concatenation

为什么x = "1"- -"1"有效并将x的值设为2

为什么x = "1"--"1"不起作用?

enter image description here

4 个答案:

答案 0 :(得分:4)

这个表达......

"1"- -"1"

...被处理为......

"1"- (-"1")

...即,从“1”减去应用于“1”的一元减运算的结果。现在,一元和二元减号操作都只适用于Numbers - 因此JS首先将其操作数转换为Numbers。所以这基本上变成了:

Number("1") - (-(Number("1"))

...最终会被评估为2,正如您所期望的那样Number("1"),评估为1


当试图理解"1"--"1"表达式时,JS解析器会尝试使用尽可能多的字符。这就是为什么首先处理这个表达式"1"--的原因。

但这没有任何意义,因为没有为文字定义自动递增/递减操作。 ++--(后缀和前缀形式)都应该更改某些可赋值('left-value')表达式的值 - 变量名,对象属性等。

然而,在这种情况下,没有什么可以改变的:“1”字面值总是“1”。 )


实际上,我在Firefox中遇到了一些不同的错误(对于x =“1” - “1”):

SyntaxError: invalid decrement operand

......和Chrome Canary:

ReferenceError: Invalid left-hand side expression in postfix operation

我认为这些消息实际上非常清楚地显示了该错误的原因。 )

答案 1 :(得分:2)

因为--是JavaScript中的运算符。

当你在第一个表达式中分隔-个字符时,你的意思是明确无误的。将它们放在一起时,JavaScript会将它们解释为一个运算符,并将以下"1"解释为意外的字符串。 (或者也许是前面的 "1"?我真的不确定。)

答案 2 :(得分:0)

“ - 1”= -1(一元减去将其转换为int) 所以。 “1” - ( - 1) 现在,“+”是串联运算符。不是 - 。所以JS返回结果2(而不是字符串concat)。

另外,“1” - “1”=>这里“ - ”是递减运算符,语法错误,因为在这种情况下字符串不会自动转换。

答案 3 :(得分:0)

因为--是递减的运算符,不能应用于常量值。