JavaScript:"1" - - "1"
在输出中给我们2
,而如果我写得像"1"--"1"
那样
未捕获的ReferenceError:后缀操作中的左侧表达式无效
工作的那个,即"1" - - "1"
console.log("1" - - "1")
不起作用的那个,即"1"--"1"
console.log("1"--"1");
对我来说这完全是奇怪的。
答案 0 :(得分:9)
-
运算符将字符串"1"
强制转换为数字。
因此,"1" - - "1"
相当于:
1 - (-1)
所以:2!
然而,"1"--"1"
会失败,因为运算符--
只需要一个操作数。 "1"--"1"
只是没有意义。在第一种情况下,-
项之间有一个额外的空间 - 这使得它们成为两个不同的运算符。
答案 1 :(得分:6)
当两个-
符号连接在一起时,它们形成unary --
operator。该运算符需要一个变量来执行操作,并且由于"1"
不是变量,因此会出错。
当两个-
分开时,两个中的第一个是subtraction operator,第二个是unary negation。这是有效的语法并产生2.
答案 2 :(得分:1)
--
和- -
不一样。
--
是Postfix Decrement Operator。 foo--
表示"获取变量foo
的值,从中减去1,将其分配回foo
。字符串文字不是变量,因此当您尝试"a string"--
时会导致错误。
-
可以是Unary - Operator或Subtraction Operator,具体取决于具体情况。
如果是"1" - - "1"
,则每个都有一个。
第二个-
是一元运算符,并将"1"
向右转换为-1
。另一个是减法运算符。
如果你减去"否定的一个"来自"一个"你得到了"两个"。
答案 3 :(得分:0)
这里的简单代数和Javascript类型逻辑......
所以代数部分:
语句评估为1-(-1)
2
。
就像你有1美元,你把你拥有的1美元减去朋友。这给你2美元,因为你不必给他美元回来(从技术上讲,你不会真的得到另一美元)。
Javascript部分:
这是有效的,因为如果它们是数字,Javascript可以计算字符串。因此,Javascript可以将"1"
转换为1
。