在 JavaScript 中如何使用整数添加字符串? [复制]
Posted
技术标签:
【中文标题】在 JavaScript 中如何使用整数添加字符串? [复制]【英文标题】:How does adding String with Integer work in JavaScript? [duplicate] 【发布时间】:2017-04-12 10:13:38 【问题描述】:以下代码给出了奇怪的结果:
console.log("" + 1 + 10 + 2 - 5 + "8");
我尝试输入各种不同的值来解决这个问题,但我无法理解幕后发生的事情。
【问题讨论】:
那一定会给出一个奇怪的结果,因为这是一个奇怪的“公式”。你能指望什么?添加字符串和数字会导致问题。 相关(我猜):javascript (+) sign concatenates instead of giving sum of variables,还有很多其他人:[javascript] addition string number
@Seb 是的,但我想知道为什么答案是这样。为什么它给出了一些特定的数字?
你可能应该在问题中添加“你得到了什么”和“你期望什么”。
【参考方案1】:
"" + 1 === "1"
"1" + 10 === "110"
"110" + 2 === "1102"
"1102" - 5 === 1097
1097 + "8" === "10978"
在 JavaScript 中,+
运算符用于数字加法和字符串连接。当您将数字“添加”到字符串时,解释器会将您的数字转换为字符串并将两者连接在一起。
但是,当您使用 -
运算符时,字符串会被转换回数字,因此可能会发生数字减法。
当您随后“添加”字符串 "8"
时,字符串连接再次发生。将数字1097
转换为字符串"1097"
,然后与"8"
连接。
【讨论】:
在一个几乎完全不相关的注释中,DCL(数字命令语言——VMS 的“shell”脚本)是我能记住的唯一一种语言,你可以减去字符串@ 987654329@ -"2"
将是 "13"
(see here)
为了完整性:在算术运算期间,任何不代表有效数字的字符串都将被强制为 NaN(空字符串除外,它被强制为 0)。【参考方案2】:
字符串 + 数字 = 串联字符串
数字 + 数字 = 两个数字之和
string - number = (强制字符串)与数字之差
解释:
如果一个或两个操作数都是字符串,则加号被视为字符串连接运算符,而不是数字相加。
减号运算符总是尝试将两个操作数都转换为数字。
所以:
"" + 1 + 10 + 2 = (string) "1102"
"1102" - 5 = (number) 1097
1097 + "8" = (string) "10798"
【讨论】:
关于更多的事情:如果第一个操作数是 sting ,则只有 '+' 运算符会将第二个操作数转换为 String 类型。任何其他数学表达式,例如 "" * 8 会将两个参数都转换为 Number 并返回 Number 或 NaN【参考方案3】:-
这是一个字符串而不是数字--""
这是一个字符串而不是数字--“1”
这是一个字符串而不是数字--"1" "10" = "1"+"10" = "110"'
这是一个字符串而不是数字--"1" "10" "2" = "1"+"10"+"2" = "1102"
这是一个数字,因为减号运算符没有混淆--1102 - 5 = 1097
这是一个字符串而不是数字--"1097" "8" = "1097"+"8" = "10978"
片段
document.getElementById("1").innerhtml = "";
document.getElementById("2").innerHTML = "" + 1;
document.getElementById("3").innerHTML = "" + 1 + 10;
document.getElementById("4").innerHTML = "" + 1 + 10 + 2
document.getElementById("5").innerHTML = "" + 1 + 10 + 2 - 5
document.getElementById("6").innerHTML = "" + 1 + 10 + 2 - 5 + "8";
<ol>
<li id='1'></li>
<li id='2'></li>
<li id='3'></li>
<li id='4'></li>
<li id='5'></li>
<li id='6'></li>
</ol>
【讨论】:
【参考方案4】:This site 有一些有用的信息。
JavaScript 对字符串和数字的区别非常放松。
...
所以如果你在一个字符串和一个数字上使用 +,JavaScript 将会使 数字为你的字符串。更好的是,如果你需要它,你可以 将数字视为字符串或将字符串视为数字。
相反,如果将数学应用于字符串,JavaScript 会尝试 让它成为一个数字。如果字符串不能被解释为数字 (例如,因为其中有字母),JavaScript 给出 NaN (不是数字)。
【讨论】:
【参考方案5】:虽然+
和-
可能具有相同的Operator Precedence,但它们没有相同的隐式转换规则。
由于-
always 表示 JavaScript 中的数字减法,使用 -
将 always 隐式尝试将表达式的左侧和右侧都解析为整数。
在这种情况下,由于运算符优先级相同,并且评估是从左到右的,因此您最终会得到 (""+1+10+2) 使用+
' s 字符串连接的隐式tostring转换,或字符串“1102”。接下来,-
将隐式尝试将字符串“1102”解析为一个数字,以及数字 5,结果为 1102-5,或数字 1097。此时,字符串“8”被隐式连接使用+
,可以看到最终结果:字符串“10978”。
也许一个有趣的替代方案是“”+1+10+2-5+8,即 1097+8 或数字 1105。
【讨论】:
以上是关于在 JavaScript 中如何使用整数添加字符串? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
如果使用JavaScript同时包含整数和字符串,如何从CRM的文本字段的单行中检索整数值