以数字作为字符串的JavaScript concating
为什么以数字作为字符串的JavaScript concating,javascript,string,syntax,operators,concatenation,Javascript,String,Syntax,Operators,Concatenation,为什么x=“1”--“1”工作并将x的值设置为2 为什么x=“1”--“1”不起作用 因为--是JavaScript中的运算符 当您在第一个表达式中分隔-字符时,您的意思是明确的。当您将它们放在一起时,JavaScript将它们解释为一个运算符,而下面的“1”则解释为意外字符串。(或者可能是前面的“1”?我真的不确定。)这个表达式 "1"- -"1" 。。。被处理为 "1"- (-"1") 。。。也就是说,将应用于“1”的一元减运算的结果从“1”中减去。现在,一元和二元减号运算只适用于数字,
x=“1”--“1”
工作并将x
的值设置为2
为什么x=“1”--“1”
不起作用
因为--
是JavaScript中的运算符
当您在第一个表达式中分隔-
字符时,您的意思是明确的。当您将它们放在一起时,JavaScript将它们解释为一个运算符,而下面的“1”
则解释为意外字符串。(或者可能是前面的“1”
?我真的不确定。)这个表达式
"1"- -"1"
。。。被处理为
"1"- (-"1")
。。。也就是说,将应用于“1”的一元减运算的结果从“1”中减去。现在,一元和二元减号运算只适用于数字,所以JS首先将其操作数转换为数字。所以这基本上变成:
Number("1") - (-(Number("1"))
。。。这最终将被计算为2,正如您可能期望的那样,计算为1
当试图理解表达式时,JS解析器试图使用尽可能多的字符。这就是为什么首先处理这个表达式
“1”-
但这毫无意义,因为没有为文字定义自动递增/递减操作。++
和-->
(后缀和前缀形式)都应更改某些可赋值('left-value')表达式的值-变量名、对象属性等
然而,在这种情况下,没有什么可更改的:“1”字面值始终是“1”。)
实际上,我在Firefox中得到了一些不同的错误(对于x=“1”--“1”):
SyntaxError: invalid decrement operand
。。。和铬金丝雀:
ReferenceError: Invalid left-hand side expression in postfix operation
我认为这些信息实际上非常清楚地说明了错误的原因。) “-1”=-1(一元减号将其转换为int)
所以"1" - (-1)
现在,“+”是串联运算符。不是-。因此JS返回结果2(而不是字符串concat)
此外,“1”--“1”=>此处”--“是减量运算符,语法错误,因为在这种情况下字符串不会自动转换。因为
--
是减量运算符,不能应用于常量值。实际上,即使使用“1”--“1”--这始终被视为(“1”--“1”),JS也没有歧义. 所以是的,如果“1”-
表达式有效,“1”
应被视为意外字符串。)@raina77ow“1”--“1”对于JavaScript来说是明确的,但我可以用两种不同的方式来解释它。OP的含义以及JavaScript对其的解释方式。