當前位置:才華齋>設計>網頁設計>

JavaScript中“+”的解析

網頁設計 閱讀(2.14W)

  一、兩個中括號相加

JavaScript中“+”的解析

[] + []

中括號沒有語句塊的作用,因此這裡的兩個中括號就是一個陣列。兩個陣列(物件型別)相加先要將其轉換成值型別(基本型別)。

1,轉成值型別呼叫valueOf,[]的valueOf()還是自己

複製程式碼 程式碼如下:

var arr = [];

eOf() === arr; // true

2,轉成字串,[]的toString是空字串

複製程式碼 程式碼如下:

[]ring(); // ""

String([]) // ""

結果出來了。兩個空字串相加,結果仍然是空字串。即這裡的“+”指字串連線而非數字相加。

  二、大括號和中括號的相加

複製程式碼 程式碼如下:

{} + []

注意這裡的大括號仍然不是物件直接量,而是空語句塊。因此可以去掉它,即相當於

複製程式碼 程式碼如下:

+ []

注意,這時由之前看似的`兩個運算數變成了實際的單運算數。而“+”運算子當只有一個運算數時只代表一個意思:算術加運算。即這裡沒有字串連線的意思了。

中括號的toString()是空字串,又相當於

複製程式碼 程式碼如下:

+ ""

“+”代表算術加運算,字串非數字,因此將其轉換成數字型別。空字串轉成數字型別在上一篇提到過,為0。

那麼最後的結果就是0。

  三、中括號和大括號相加

複製程式碼 程式碼如下:

[] + {}

與上面的對比,只是中括號和小括號交換了順序。結果卻不相同。大括號放到右邊後,與上面討論的大括號的意義不同了。這裡的大括號就是一個物件直接量而非語句塊。

“+” 兩邊的運算數轉成值型別分別是:"" 和 "[object Object]"。這時 "+" 表示字串連線。即

複製程式碼 程式碼如下:

"" + "[object Object]"

結果是 “[object Object]”。

  四、小括號也和它們相加試試

突發奇想!好吧,小括號雖然有多義性,但它不能作為運算數。