1. 程式人生 > >JS-詳解算數運算符"+"

JS-詳解算數運算符"+"

沒有 strong fine span 也會 結果 結合 運算符和 布爾

   二元加法運算符“+”可以對兩個數字做加法,也可以做字符串連接操作:

  當兩個操作數都是數字或都是字符串的時候,計算結果是顯而易見的。然而對於其他情況來說,則要進行一些必要的類型轉換,並且運算符的行為依賴於類型轉換的結果。加號的轉換規則優先考慮字符串連接,如果其中一個操作數是字符串或者轉換為字符串的對象,另外一個操作數將會轉換為字符串,加法將進行字符串的連接操作。如果兩個操作數都不是類字符串(string-like)的,那麽都將進行算術加法運算。 從技術上講,加法操作符的行為表現為: ·如果其中一個操作數是對象,則對象會遵循對象到原始值的轉換規則轉換為原始類值,在進行了對象到原始值的轉換後,如果其中一個操作數是字符串的話,另一個操作數也會轉換為字符串,然後進行字符串連接。 ·否則,兩個操作數都將轉換為數字(或者NaN),然後進行加法操作。

  這裏有一些例子:

1 + 2 // => 3: 加法

"1" + "2" // => "12": 字符串連接

"1" + 2 // => "12": 數字轉換為字符串後進行字符串連接

1 + {} // => "1[object Object]": 對象轉換為字符串後進行字符串連接

true + true // => 2: 布爾值轉換為數字後做加法

2 + null // => 2: null轉換為0後做加法

2 + undefined// => NaN: undefined轉換為NaN後做加法

  最後,需要特別註意的是,當加號運算符和字符串和數字一起使用時,需要考慮加法的結合性的對運算順序的影響。也就是說,運算結果是依賴於運算符的運算順序的,比如:

1 + 2 + " blind mice"; // => "3 blind mice"

1 +(2 + " blind mice"); // => "12 blind mice"

  第一行沒有圓括號,“+”運算符具有從左至右的結合性,因此兩個數字首先進行加法計算,計算結果和字符串進行連接。在第二行中,圓括號改變了運算順序:數字2和字符串連接,生成一個新字符串,然後數字1和這個新字符串再次連接,生成了最終結果。

JS-詳解算數運算符"+"