为什么“+”运算符在JavaScript中表现异常?

时间:2016-08-11 06:55:38

标签: javascript operators concatenation string-concatenation arithmetic-expressions

我正在学习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 ,因为其中一个数字是一个字符串?

请用简单明了的语言解释我。

感谢。

5 个答案:

答案 0 :(得分:3)

Javascript从左到右执行表达式。所以在最后一个例子中它会这样做:

5 + 2 => 7
7 + "3" => "73"

希望有所帮助

答案 1 :(得分:2)

' +'不是表现异常。

你没有正确理解这个概念。 +运算符在与字符串一起使用时充当连接运算符,在与数字一起使用时充当加法运算符。

答案 2 :(得分:2)

+运算符在javascript中执行两项操作。对于字符串,它连接(连接它们)。对于数字,它会添加它们。如果您对数字和字符串的组合使用+,则javascript 会将其强制转换为可以处理的内容。

在您的情况下,string +number强制转换为两个字符串。然后它连接起来。

var x = "5" + 2 + 3;
// coerced by runtime into var x = "5" + "2" + "3";
// x = "523";

在以后的情况下,字符串前面有两个数字。在这种情况下,评估顺序将启动。运行时首先评估算术,然后将其强制转换为字符串以进行连接

var x = 5 + 2 + "3";
//arithmetic performed var x = 7 + "3";
//coerced to var x = "7" + "3";
//x = "73";

答案 3 :(得分:0)

从左到右解析语句

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" 

答案 4 :(得分:0)

var x= 5 + "2" + 3中,第一个操作是追加,因为其中一个操作数是String。

var x = 5 + 2 + "3"中,前两个操作数是整数,因此它将被添加,然后追加字符串值3,这就是你得到73的原因。

毕竟答案很简单,JS表达式从左侧开始执行,因为这里的所有运算符都相同(+,相同的优先级)