我在Javascript中读了一本关于运算符的书,这让我很困惑。
console.log("5"+1);
这会使“5”成为一个字符串。因此结果将是51
。
console.log("5"-1);
此结果为4
。我知道它会将"5"
转换为5
,但为什么不将undefined
显示为“字符串减去数字”?
更新:那么其他语言怎么样?他们更受限制吗?
答案 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)。
运营商+ :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
答案 4 :(得分:1)
在javascript(+)运算符中,操作方式如下所述
答案 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。