3

以下是什麼評估?javascript字符串和數字變量

"1"+2+4 

這個怎麼樣:

5 + 4 + "3" 

在第一種情況下,因爲"1"是一個字符串,一切是一個字符串,所以結果是"124"。在第二種情況下,其93,這裏發生了什麼?爲什麼在一個實例中增加發生,而另一個發生字符串連接?

var x = "1" + 2 + 4; 
var z = 5 + 4 + "3"; 
console.log(x); // "124" 
console.log(z); // 93 

任何人都可以解釋這一點嗎?

+2

提示:9 +「3」... –

+0

@MitchWheat和第一個怎麼辦?根據你在第一種情況下,我可以這樣做:「1」+6。這將是錯誤的 –

+0

'1 +「」'(將數字轉換爲字符串) –

回答

5

表達式從左到右評估。

"1"+2+3 
^--^ 
"12" //string +3 
    ^_____________^ 
"123" //string 

在第二情況下

1+2+"3" 
^_^ 
    3+"3" 
    ^___^ 
    "33" // string 
1

想想操作順序(rtl或ltr)每次執行二進制操作時,它會相應地進行轉換,因此5 + 4將是int,(5 + 4)+「3」將是一個字符串,因爲「3」是一個字符串

相同方法適用於不同的實施例

0

var x = "1" + 2 + 4; // 124

這走的是字符串「1」和連接到它「2」和「4」爲字符串。

var z = 5 + 4 + "3"; // 93

這取號4和5相加,然後得到的9號,然後連接字符串「3」來表示,以產生另一個字符串。

這裏要說的關鍵是你在這裏做的最終結果是字符串連接。評估數字的順序是不同的,但最終的結果是一個字符串。

0

在第一種情況首先(1)創建一個字符串,然後JavaScript的串接以下數量作爲字符串(124)。

在首次創建數第二個然後JavaScript的將第二號碼至該第一數目(5 + 4 = 9),然後添加一個字符串,以便它的9級聯和3

0

在這兩種情況都適用於類型轉換和從左到右的優先順序。 在第一個,

var x = "1" + 2 + 4; // 124 

編譯器需要1爲串和後,將與2級聯現在圖12是字符串,以便將與4串聯和結果將產生「124」作爲字符串。

var z = 5 + 4 + "3"; // 93 
在第二個

, 第一5和4是數字所以使加和結果將是9,並且這將與字符串3洙輸出串接將93字符串。