为什么'+'运算符在JavaScript中表现异常?
Why does '+' operator behave abnormally in JavaScript?
我在学习JavaScript。
我尝试在 JavaScript 表达式中用双引号括起不同的数字,我对下面代码语句的第三个结果感到惊讶。
考虑下面的代码语句,它们的输出出现在每个代码行之前的注释中。
var x = "5" + 2 + 3;
document.getElementById("demo").innerHTML = x; //Output is : **523**
var x = 5 + "2" + 3;
document.getElementById("demo").innerHTML = x; //Output is : **523**
var x = 5 + 2 + "3";
document.getElementById("demo").innerHTML = x; //Output is : **73**
有人可以解释为什么以及如何在 JavaScript 中“+”运算符表现异常吗?
为什么最后一条语句的输出不是 523 因为其中一个数字是字符串?
请用通俗易懂的语言向我解释一下。
谢谢。
Javascript 从左到右执行表达式。所以在最后一个例子中它会这样做:
5 + 2 => 7
7 + "3" => "73"
希望对您有所帮助
'+'没有表现异常。
你没有理解正确的概念。
+ 运算符在与字符串一起使用时充当连接运算符,在与数字一起使用时充当加法运算符。
从左到右解析语句
var x = "5" + 2 + 3;
=> ("5" + 2) + 3; //the + works as string concatenation since one operand is a string
=> "52" + 3
=> "523"
var x = 5 + "2" + 3;
//same for this one as above
var x = 5 + 2 + "3";
=> (5 + 2) + "3"; //the + works as an add operator because both oerands are numbers
=> 7 + "3" //the + works as string concatenation since one operand is a string
=> "73"
+
运算符在 javascript 中做了两件事。对于字符串,它连接(连接它们)。对于数字,它会将它们相加。如果您对数字和字符串的组合使用 +
,javascript 将它们强制 为它可以作用的东西。
在你的例子中,a string
+
a number
强制转换为两个字符串。然后它连接起来。
var x = "5" + 2 + 3;
// coerced by runtime into var x = "5" + "2" + "3";
// x = "523";
在后一种情况下,字符串前有两个数字。在这种情况下,评估顺序开始。运行时首先评估算术 before 将其强制转换为字符串以连接
var x = 5 + 2 + "3";
//arithmetic performed var x = 7 + "3";
//coerced to var x = "7" + "3";
//x = "73";
在var x= 5 + "2" + 3
中,第一个操作是追加,因为其中一个操作数是字符串。
在var x = 5 + 2 + "3"
中,前两个操作数是整数,所以它会被添加然后追加字符串值3,这就是你得到73的原因。
毕竟答案很简单,JS表达式从左边开始执行,因为这里的所有运算符都是相同的(+,优先级相同)
我在学习JavaScript。
我尝试在 JavaScript 表达式中用双引号括起不同的数字,我对下面代码语句的第三个结果感到惊讶。
考虑下面的代码语句,它们的输出出现在每个代码行之前的注释中。
var x = "5" + 2 + 3;
document.getElementById("demo").innerHTML = x; //Output is : **523**
var x = 5 + "2" + 3;
document.getElementById("demo").innerHTML = x; //Output is : **523**
var x = 5 + 2 + "3";
document.getElementById("demo").innerHTML = x; //Output is : **73**
有人可以解释为什么以及如何在 JavaScript 中“+”运算符表现异常吗?
为什么最后一条语句的输出不是 523 因为其中一个数字是字符串?
请用通俗易懂的语言向我解释一下。
谢谢。
Javascript 从左到右执行表达式。所以在最后一个例子中它会这样做:
5 + 2 => 7
7 + "3" => "73"
希望对您有所帮助
'+'没有表现异常。
你没有理解正确的概念。 + 运算符在与字符串一起使用时充当连接运算符,在与数字一起使用时充当加法运算符。
从左到右解析语句
var x = "5" + 2 + 3;
=> ("5" + 2) + 3; //the + works as string concatenation since one operand is a string
=> "52" + 3
=> "523"
var x = 5 + "2" + 3;
//same for this one as above
var x = 5 + 2 + "3";
=> (5 + 2) + "3"; //the + works as an add operator because both oerands are numbers
=> 7 + "3" //the + works as string concatenation since one operand is a string
=> "73"
+
运算符在 javascript 中做了两件事。对于字符串,它连接(连接它们)。对于数字,它会将它们相加。如果您对数字和字符串的组合使用 +
,javascript 将它们强制 为它可以作用的东西。
在你的例子中,a string
+
a number
强制转换为两个字符串。然后它连接起来。
var x = "5" + 2 + 3;
// coerced by runtime into var x = "5" + "2" + "3";
// x = "523";
在后一种情况下,字符串前有两个数字。在这种情况下,评估顺序开始。运行时首先评估算术 before 将其强制转换为字符串以连接
var x = 5 + 2 + "3";
//arithmetic performed var x = 7 + "3";
//coerced to var x = "7" + "3";
//x = "73";
在var x= 5 + "2" + 3
中,第一个操作是追加,因为其中一个操作数是字符串。
在var x = 5 + 2 + "3"
中,前两个操作数是整数,所以它会被添加然后追加字符串值3,这就是你得到73的原因。
毕竟答案很简单,JS表达式从左边开始执行,因为这里的所有运算符都是相同的(+,优先级相同)