在 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中添加为字符串的整数[重复]

如何在 C++ 中使用输入重定向添加整数

如果使用JavaScript同时包含整数和字符串,如何从CRM的文本字段的单行中检索整数值

如何在JavaScript中将数字的二进制表示从字符串转换为整数?

javascript中将整数添加千位符号

如何检查Javascript Map是不是有对象键