以下代码给出了奇怪的结果:
console.log("" + 1 + 10 + 2 - 5 + "8");
我试过输入各种不同的值来解决这个问题,但我无法理解幕后发生了什么。
以下代码给出了奇怪的结果:
console.log("" + 1 + 10 + 2 - 5 + "8");
我试过输入各种不同的值来解决这个问题,但我无法理解幕后发生了什么。
"" + 1 === "1"
"1" + 10 === "110"
"110" + 2 === "1102"
"1102" - 5 === 1097
1097 + "8" === "10978"
在 JavaScript 中,+
运算符用于数字加法和字符串连接。当您将数字“添加”到字符串时,解释器会将您的数字转换为字符串并将两者连接在一起。
-
但是,当您使用运算符时,字符串会被转换回数字,因此可能会发生数字减法。
当您“添加”一个 string"8"
时,再次发生字符串连接。将数字1097
转换为字符串"1097"
,然后与"8"
.
字符串+数字=连接的字符串
数字+数字= 两个数字之和
字符串-数字=(强制字符串)与数字之间的差值
如果一个或两个操作数是字符串,则加号被视为字符串连接运算符而不是数字相加。
在减去运营商总是试图将两个操作数转换为数字。
所以:
"" + 1 + 10 + 2 = (string) "1102"
"1102" - 5 = (number) 1097
1097 + "8" = (string) "10798"
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。