关于 Javascript 中的 "5"-1 & "5"+1(正负号)

About "5"-1 & "5"+1 in Javascript (plus and minus signs)

我在 Javascript 读了一本关于运算符的书,这让我很困惑。

console.log("5"+1);

这将使“5”成为一个字符串。所以结果将是 51.

console.log("5"-1);

这个结果将是 4。我知道它将 "5" 转换为 5,但为什么 undefined 没有显示为 "a string minus a number"?

更新:那么其他语言呢?他们更严格吗?

由于类型强制转换以及它在 JavaScript 中不是很一致,在第二种情况下 "5" 被转换为数字 5,而 1 从中减去,得到 4.

遗憾的是,JavaScript 预计会利用 Java 早期的成功推广和 plus string 连接被采用,因为 Java 使用它。

所以 Java脚本努力为您将字符串强制转换为数字,它确实做到了,只是加号被用于字符串所以......好吧......

虽然 Java脚本有很多优势,但它是在 10 天内完成的,并且有许多像这个一样的搞笑方面,请检查这个 comedy gold

因为当我们使用“+”时,它可以以两种不同的方式使用:-
1. 作为数学运算符。
2. 连接字符串

但'-'只能用作数学运算符。
因此,javascript 在“-”的情况下将“5”视为数字,而在“+”的情况下将“5”视为字符串。

+ 是一个运算符,在添加数字时表示 SUM,在使用字符串时表示 CONCATENATE。

由于第一个是 STRING,它将继续连接 "5"+toString(1)。

由于减号 (-) 运算符不适用于 String,因此您未定义。

如果您想使用 MINUS 运算符,您需要执行以下操作:

parseInt("5") -> It will give you 5, the number
parseInt("5")-1 = 4
"5"+1 = 51
parseInt("5")+1 = 6

希望对您有所帮助

"5" 可以强制转换为 5(整数)。这就是为什么你得到 4 作为输出。 但是,如果您尝试:

console.log("text" - 1);

文本无法强制转换,输出为NaN

根据标准 EcmaScript 262。当涉及字符串时,+- 运算符的行为不同。第一个将每个值转换为字符串。第二个将每个值转换为数字。

来自标准:

If Type(lprim) is String or Type(rprim) is String, then Return the String that is the result of concatenating ToString(lprim) followed by ToString(rprim)

这条规则意味着,如果表达式中有字符串值,则+操作中涉及的所有值都转换为字符串。在 JavaScript 中,当 + 运算符与字符串一起使用时,它会将它们连接起来。这就是为什么 console.log("5"+1) returns “51”。 1 转换为字符串,然后将“5”+“1”连接在一起。

然而,上述规则不适用于 - 运算符。当您使用 - 时,所有值都会根据标准(见下文)转换为数字。因此,在这种情况下,"5" 转换为 5,然后减去 1

来自标准:

5 Let lnum be ToNumber(lval).

6 Let rnum be ToNumber(rval).


来自标准 EcmaScript 262 的运算符定义。

运算符 + : http://www.ecma-international.org/ecma-262/5.1/#sec-11.6.1

运算符 - : http://www.ecma-international.org/ecma-262/5.1/#sec-11.6.2

在javascript(+)运算符的操作方式如下所述

  • 3+true 将 return 4,数字和布尔值或两个布尔值之间的 (+) 运算符会将布尔值转换为数字,因此 true 转换为 1 因此结果为 4
  • "2"+true 将 return "2true" ,如果其中一个操作数是字符串,它将把另一个操作数(数字或布尔值)转换为字符串并处理连接
  • -"12"+3 将 return -9 ,字符串前面的 (-) 运算符会将字符串转换为数字并将其设为 -12 和 return -9

减法运算符 (-) 从左边的数字中减去运算符右边的数字。

当其中一个操作数是字符串时,尝试将字符串转换为数字。 如果您尝试 console.log("abc" - 1) 而不是使用“5”;它将提示错误为 NaN。

仅供参考: 减法运算符有特殊的规则来处理 JavaScript:

中存在的各种类型转换

如果两个操作数都是数字,进行算术减法return结果。

如果任一数字为 NaN,则结果为 NaN。

如果从 Infinity 中减去 Infinity,结果为 NaN。

如果-Infinity减去-Infinity,结果为NaN。

如果无穷大减去-无穷大,结果就是无穷大。

如果-Infinity减去Infinity,结果就是-Infinity。

如果+0减去+0,结果就是+0。

如果+0减去–0,结果就是–0。

如果–0减去–0,结果是+0。

如果两个操作数中的任何一个不是数字,则结果为 NaN。