2016-09-23 54 views
0

我是JavaScript新手,有人能解释为什么这3个结果不同吗?JavaScript变量查询理解


实施例1

var x = 5 + 2 + 3; 
document.getElementById("demo").innerHTML = x; 

输出:10


例2

var x = 5 + 2 + "3"; 
document.getElementById("demo").innerHTML = x; 

输出: 73


例3

var x = 5 + "2" + 3; 
document.getElementById("demo").innerHTML = x; 

输出:提供的答案523

+0

这与HTML或jQuery btw无关。 –

+0

@ Felix Kling - 这是HTML,因为在计算后将重新调整的输出放入HTML中。和jQuerify它 - $('#demo')。html(x);或更正确 - $('#demo')。text(x); :) – gavgrif

回答

2

+超载执行字符串连接另外,它是left-to-right associative

因为操作符被重载,所以需要一个规则来解决两个操作数是不同数据类型的情况。此规则很简单:

如果一个操作数是一个字符串,则将另一个操作数转换为一个字符串。

这意味着代码被评估为

// 1. 
((5 + 2) + 3) 
= 7 + 3 
= 10 

// 2. 
((5 + 2) + "3") 
    = 7 + "3"   // number + string -> convert number to string 
    = "7" + "3" 
    = "73" 

// 3. 
(("5" + 2) + 3)  // number + string -> convert number to string 
    = (("5" + "2") + 3) 
    = "52" + 3   // number + string -> convert number to string 
    = "52" + "3" 
    = "523" 
0

稍微少技术版本(这些都是比这个答案更正确的),但允许你不希望显示的输出 - 它的所有关于字符串与数字 - 如果两个元素是数字,你添加它们 - 你会得到数字加法。如果你有一个数字和一个字符串 - 当你添加它们时,输出将是字符串后面的数字。

所以看你的例子:

var x = 5 + 2 + 3; 
Output: 10 

的5,2和3的所有数字,这样的输出是什么,他们都加到一起

var x = 5 + 2 + "3"; 
Output: 73 

5和2是数字,所以加在一起给出7,但“3”是一个字符串,所以它给出的数字后面跟着字符串,即7后跟3或73

x = "5" + 2 + 3; 
    Output: 523 

5是一个字符串,2和3是数字,但不添加到彼此但是旁边显示彼此 - 523

var x = 5 + "2" + 3; 
Output: 523 

5是一个数字,并且“ 2" 是一个字符串和3是一个数,但不添加到彼此但是旁边显示彼此 - 523

0

+那张左到右,以及操作完成依赖于参数。如果两个参数都是数字,则执行加法。如果任何参数不是数字,它将执行串接。 5 + 2因此是7,但"5" + "2""52"(就像"a" + "b""ab")。此外,5 + "2""5" + 2也都是"52"。然后它类似地与52 + 3,52 + "3""52" + 3一起工作。

0

它与JavaScript有松散类型的数据类型有关。在你的第一个例子中,所有的数字都是相加的,因为它们都被视为整数。

在您的其他示例中,语句从左到右进行处理。因此,数字+数字+字符串首先添加数字,然后尝试添加数字和字符串,这将使返回的结果成为字符串。

在数字+字符串+数字的情况下,当添加前两个操作数时,输出是一个字符串,所以当添加一个字符串和一个数字时,它将返回一个字符串。

延伸阅读:http://www.w3schools.com/js/js_datatypes.asp