为什么'+'运算符在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表达式从左边开始执行,因为这里的所有运算符都是相同的(+,优先级相同)