我正在学习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 ,因为其中一个数字是一个字符串?
请用简单明了的语言解释我。
感谢。
答案 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表达式从左侧开始执行,因为这里的所有运算符都相同(+,相同的优先级)