2013-07-30 143 views
0

在JavaScript中,有人可以解釋2個以下表達式的結果:如何評估JavaScript表達式?

「4」 + 4和4 + 「4」

謝謝!

+0

它打印「44」都假定爲字符串 – exussum

+1

您應該得到一個JavaScript參考來解決這些基本問題。 –

回答

1
1+'1'+1 = '111' 
    1+1+'1' = '21' 
    '1'+(1+1) = '12' 
    '1'+1+1 = '111' 

的Javascript,直到達到一個字符串,然後切換到串聯,並且它也執行數學首先遵循常規公式規則運行()操作。

+0

不一定是最好的答案,但我明白我想要什麼:表達式從左到右進行評估,我理解了+運算符的連接。謝謝 – ontk

1

他們都是'44'。將'4'作爲字符串存在將整個操作轉換爲一個字符串,因此兩個字符連接在一起。

3

兩者都會導致String

"44" 

這是因爲+運營商提供2個目的 - 除了和串聯。而且,如果其中一個操作數是String(或者被內部ToPrimitive()強制轉換爲String),它們將被連接在一起。

這描述in the specification爲:

7)如Typelprim)是字符串或Typerprim)是字符串,然後

一個)返回字符串即結合ToStringlprim)後接ToStringrprim

8)返回將所述加法運算到ToNumber的(結果lprim)和ToNumberrprim)。請參閱下面的註釋11.6.3

如果你想確保此外,還可以使用parseFloat()或在每個unary +

var a = "4", b = 4; 

console.log(parseFloat(a) + parseFloat(b)); // 8; 

console.log((+a) + (+b)); // 8, extra parenthesis for clarity 
0

引自:http://javascript.about.com/od/variablesandoperators/a/vop10.htm

一件事,也可能混淆初學者是JavaScript使用+ 與文本字符串意味着什麼,從什麼 用數字意味着完全不同的。而數字+表示將數字 與文本+表示連接在一起。連接 基本上意味着加入一個文本字符串到第一個結尾,因此「我的」+「書籍」給出了「mybook」。初學者傾向於 弄糊塗的是,雖然3 + 3給6,「3」+「3」給「33」。

您還可以使用+ =與文本字符串直接將變量或 文本添加到 左側的文本字符串變量的末尾。

混合數據類型

附加混亂,當你與那些不同類型的變量 工作可能出現。所有操作都要求它們在兩個操作上的變量 都是相同的類型。在JavaScript 能夠執行任何涉及兩個不同數據類型的操作之前,必須先將其中一個變量從一種類型轉換爲其他類型的變量。如果沒有第一個 將數字轉換爲文本或將文本轉換爲數字,則無法將數字添加到文本字符串。

在數據類型之間轉換時,我們有兩種選擇。我們可以允許 JavaScript自動爲我們做轉換,或者我們可以告訴 JavaScript我們要轉換哪個變量。

JavaScript將嘗試將任何文本字符串轉換爲數字 當執行減法,乘法,除法和 取餘數。您的文本字符串實際上需要包含 ,JavaScript可以將其轉換爲數字(即,像 「10」這樣的字符串),以便轉換生效。

如果我們使用+,那麼這可能意味着我們想要將 字符串轉換爲數字,然後添加或我們想要將數字 轉換爲字符串並連接它們。 JavaScript只能執行 這兩個選項之一。它總是將數字轉換爲字符串(因爲無論字符串是否包含數字, 都會起作用)。

以下是一些示例。

  1. 「5」 - 3 = 2;

  2. 「5」 + 3 = 「53」

  3. 2 + 「7」= 「27」

  4. 5 + 9 + 「1」= 「141」

由於減法只適用於數字1在執行減法之前,將文本字符串 轉換爲數字。

在2和3中,數字在被 連接(連接)到另一個文本串之前被轉換爲文本串。

4,最左邊的加法先完成。由於這兩個數字都是 ,所以它們實際上被添加在一起而不被視爲文本。第一次加法的結果 給我們帶來了與第三次 示例類似的情況,因此該加法的結果被轉換爲文本並連接到 。

要實際強制JavaScript將文本字符串轉換爲數字,我們可以使用Number(「3」)或強制JavaScript將 數字轉換爲文本字符串,我們可以使用String(5)。

+1

如果這是一個引用,源應該歸因於某個地方。 –