关于 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。
我在 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。