JavaScript 中字符串的减号 (-) 运算符?

Minus (-) operator on strings in JavaScript?

我正在学习 this JavaScript Quiz 并发现了这个问题 -

"1" - - "1";

The result of this statement is 2.

谁能解释一下这是怎么回事?

我还发现偶数 - 会进行字符串加法,而奇数 - 会进行减法。只有当数字是字符串时才会发生这种情况。

这里还有一些例子-

"1" - "1" => 0
"1" - - "1" => 2
"1" - - - "1" => 0
"1" - - - - "1" => 2
"a" - "b" => NaN

表达式等同于"1" - (-"1")。一元减号会将其参数 ("1") 转换为数字 (1) 并取其倒数 (-1)。二进制减法会将其参数("1"-1)转换为数字(1-1)并计算它们的差值(2)。

根据 ecma 脚本 spec :

12.8.4 The Subtraction Operator ( ‐ )

5。令 lnum 为 ToNumber(lval)

6。令 rnum 为 ToNumber(rval)

7。 Return 对 lnumrnum

应用减法运算的结果

什么意思 在减法的情况下,两个操作数都转换为数字。

所以“1”-“1”实际上意味着 ToNumber("1")- ToNumber("1") 但在 + 中,因为它是 "overloaded"(java 人会这样称呼它),所以它转到“串联字符串大小写。