在 JavaScript 中添加带有整数的字符串如何工作?

IT技术 javascript string
2021-03-08 09:47:35

以下代码给出了奇怪的结果:

console.log("" + 1 + 10 + 2 - 5 + "8");

我试过输入各种不同的值来解决这个问题,但我无法理解幕后发生了什么。

5个回答
"" + 1          === "1"
"1" + 10        === "110"
"110" + 2       === "1102"
"1102" - 5      === 1097
1097 + "8"      === "10978"

在 JavaScript 中,+运算符用于数字加法和字符串连接。当您将数字“添加”到字符串时,解释器会将您的数字转换为字符串并将两者连接在一起。

-但是,当您使用运算符时,字符串会被转换回数字,因此可能会发生数字减法。

当您“添加”一个 string"8"时,再次发生字符串连接。将数字1097转换为字符串"1097",然后与"8".

在一个几乎完全不相关的注释中,DCL(数字命令语言——VMS 的“shell”脚本)是我能记住的唯一一种可以减去字符串的语言"123"——"2"将是"13"见这里
2021-05-08 09:47:35
为了完整性:在算术运算期间,任何不代表有效数字的字符串都被强制为 NaN(空字符串除外,它们被强制为 0)。
2021-05-20 09:47:35

字符串+数字=连接的字符串

数字+数字= 两个数字之和

字符串-数字=(强制字符串)与数字之间的差值

解释:

如果一个或两个操作数是字符串,则加号被视为字符串连接运算符而不是数字相加。

减去运营商总是试图将两个操作数转换为数字。

所以:

"" + 1 + 10 + 2 = (string) "1102"    
"1102" - 5      = (number)  1097
1097 + "8"      = (string) "10798"
更重要的是:如果第一个操作数是 sting ,则只有 '+' 运算符会将第二个操作数转换为 String 类型。任何其他数学表达式,例如 "" * 8 会将两个参数都转换为 Number 并返回 Number 或 NaN
2021-04-28 09:47:35
  1. 这是字符串不是数字--""
  2. 这是一个字符串而不是一个数字——“1”
  3. 这是一个字符串而不是数字--"1" <+> "10" = "1"+"10" = "110"'
  4. 这是一个字符串而不是数字--"1" <+> "10" <+> "2" = "1"+"10"+"2" = "1102"
  5. 这是一个数字,因为减号运算符没有混淆--1102 - 5 = 1097
  6. 这是一个字符串而不是数字--"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>

这个网站有一些有用的信息。

JavaScript 对字符串和数字之间的区别非常放松。

...

所以如果你在一个字符串和一个数字上使用 + ,JavaScript 会为你把这个数字变成一个字符串。更好的是,如果您需要它,您可以将数字视为字符串或将字符串视为数字。

相反,如果将数学应用于字符串,JavaScript 会尝试将其变成数字。如果字符串不能被解释为数字(例如因为其中有字母),JavaScript 会给出 NaN(非数字)。

虽然+-可能具有相同的Operator Precedence,但它们没有相同的隐式转换规则。

由于- 总是意味着在JavaScript数减法,使用-总是隐式地试图解析表达式作为整数的左侧和右侧两者。

在这种情况下,由于运算符优先级相同,并且计算是从左到右,因此您最终得到(""+1+10+2) using+用于字符串连接的隐式 tostring 转换,或字符串 "1102 ”。接下来,-将隐式地尝试将字符串“1102”解析为一个数字,以及数字 5,结果是 1102-5 或数字 1097。此时,字符串“8”使用+, 和可以看到最终结果:字符串“10978”。

也许一个有趣的选择是 ""+1+10+2-5+8,即 1097+8,或数字 1105。