2016-09-23 53 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