关于“5”-1& Javascript中的“5”+1(加号和减号)

时间:2015-05-27 07:23:54

标签: javascript add date-arithmetic

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

console.log("5"+1);

这会使“5”成为一个字符串。因此结果将是51

console.log("5"-1);

此结果为4。我知道它会将"5"转换为5,但为什么不将undefined显示为“字符串减去数字”?

更新:那么其他语言怎么样?他们更受限制吗?

8 个答案:

答案 0 :(得分:5)

可悲的是,人们期望JavaScript能够在早期使用Java成功进行推广,并且自Java使用以来,字符串连接的被采用。

因此,JavaScript会努力为您强制将字符串强制转换为数字,它确实如此,只是因为字符串的加号如此......好吧......

虽然Javascript有很多实力,但它在10天内完成并且有很多像这样的热闹方面,请查看comedy gold

答案 1 :(得分:2)

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

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

由于MINUS( - )运算符不能与String一起使用,因此未定义。

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

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

希望它能帮到你

答案 2 :(得分:1)

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

但' - '只能用作数学运算符。
因此,javascript会考虑' 5'作为' - '的数字而' 5'在' +'。

的情况下为字符串

答案 3 :(得分:1)

根据标准EcmaScript 262. +-运算符在涉及字符串时表现不同。第一个将每个值转换为字符串。第二个将每个值转换为数字。

来自标准:

  

如果Type(lprim)是String或Type(rprim)是String,则返回   字符串,它是连接ToString(lprim)后跟的结果   的ToString(rprim)

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

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

来自标准:

  

5让lnum为ToNumber(lval)。

     

6让rnum为ToNumber(rval)。

标准EcmaScript 262中的运算符定义。

运营商+ http://www.ecma-international.org/ecma-262/5.1/#sec-11.6.1 Operator + definition

操作员http://www.ecma-international.org/ecma-262/5.1/#sec-11.6.2 Operator - definition

答案 4 :(得分:1)

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

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

答案 5 :(得分:0)

由于类型强制以及它在JavaScript中的一致性如何,在第二种情况下,"5"会转换为数字5,并从中减去1 ,给你4

答案 6 :(得分:0)

“5”可以强制为5(整数)。这就是你输出4的原因。 但是,如果你尝试:

console.log("text" - 1);

无法强制文本,输出为NaN

答案 7 :(得分:0)

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

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

仅供参考: 减法运算符具有处理JavaScript中存在的各种类型转换的特殊规则:

如果两个操作数是数字,则执行算术减法并返回结果。

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

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

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

如果从无穷大中减去-Infinity,则结果为无穷大。

如果从-Infinity中减去Infinity,则结果为-Infinity。

如果从+0中减去+0,则结果为+0。

如果从+0中减去-0,则结果为-0。

如果从-0中减去-0,则结果为+0。

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