为什么x = "1"- -"1"
有效并将x
的值设为2
?
为什么x = "1"--"1"
不起作用?
答案 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)
因为--
是递减的运算符,不能应用于常量值。