JavaScript中“+”的陷阱深刻理解
更新時間:2012年12月04日 10:12:56 作者:
本文將詳細介紹JavaScript中“+”的一些錯誤應用,需要的朋友可以參考下
一、兩個中括號相加
[] + []
中括號沒有語句塊的作用,因此這里的兩個中括號就是一個數(shù)組。兩個數(shù)組(對象類型)相加先要將其轉(zhuǎn)換成值類型(基本類型)。
1,轉(zhuǎn)成值類型調(diào)用valueOf,[]的valueOf()還是自己
var arr = [];
arr.valueOf() === arr; // true
2,轉(zhuǎn)成字符串,[]的toString是空字符串
[].toString(); // ""
String([]) // ""
結果出來了。兩個空字符串相加,結果仍然是空字符串。即這里的“+”指字符串連接而非數(shù)字相加。
二、大括號和中括號的相加
{} + []
注意這里的大括號仍然不是對象直接量,而是空語句塊。因此可以去掉它,即相當于
+ []
注意,這時由之前看似的兩個運算數(shù)變成了實際的單運算數(shù)。而“+”運算符當只有一個運算數(shù)時只代表一個意思:算術加運算。即這里沒有字符串連接的意思了。
中括號的toString()是空字符串,又相當于
+ ""
“+”代表算術加運算,字符串非數(shù)字,因此將其轉(zhuǎn)換成數(shù)字類型??兆址D(zhuǎn)成數(shù)字類型在上一篇提到過,為0。
那么最后的結果就是0。
三、中括號和大括號相加
[] + {}
與上面的對比,只是中括號和小括號交換了順序。結果卻不相同。大括號放到右邊后,與上面討論的大括號的意義不同了。這里的大括號就是一個對象直接量而非語句塊。
“+” 兩邊的運算數(shù)轉(zhuǎn)成值類型分別是:"" 和 "[object Object]"。這時 "+" 表示字符串連接。即
"" + "[object Object]"
結果是 “[object Object]”。
四、小括號也和它們相加試試
突發(fā)奇想!好吧,小括號雖然有多義性,但它不能作為運算數(shù)。
[] + []
中括號沒有語句塊的作用,因此這里的兩個中括號就是一個數(shù)組。兩個數(shù)組(對象類型)相加先要將其轉(zhuǎn)換成值類型(基本類型)。
1,轉(zhuǎn)成值類型調(diào)用valueOf,[]的valueOf()還是自己
復制代碼 代碼如下:
var arr = [];
arr.valueOf() === arr; // true
2,轉(zhuǎn)成字符串,[]的toString是空字符串
復制代碼 代碼如下:
[].toString(); // ""
String([]) // ""
結果出來了。兩個空字符串相加,結果仍然是空字符串。即這里的“+”指字符串連接而非數(shù)字相加。
二、大括號和中括號的相加
復制代碼 代碼如下:
{} + []
注意這里的大括號仍然不是對象直接量,而是空語句塊。因此可以去掉它,即相當于
復制代碼 代碼如下:
+ []
注意,這時由之前看似的兩個運算數(shù)變成了實際的單運算數(shù)。而“+”運算符當只有一個運算數(shù)時只代表一個意思:算術加運算。即這里沒有字符串連接的意思了。
中括號的toString()是空字符串,又相當于
復制代碼 代碼如下:
+ ""
“+”代表算術加運算,字符串非數(shù)字,因此將其轉(zhuǎn)換成數(shù)字類型??兆址D(zhuǎn)成數(shù)字類型在上一篇提到過,為0。
那么最后的結果就是0。
三、中括號和大括號相加
復制代碼 代碼如下:
[] + {}
與上面的對比,只是中括號和小括號交換了順序。結果卻不相同。大括號放到右邊后,與上面討論的大括號的意義不同了。這里的大括號就是一個對象直接量而非語句塊。
“+” 兩邊的運算數(shù)轉(zhuǎn)成值類型分別是:"" 和 "[object Object]"。這時 "+" 表示字符串連接。即
復制代碼 代碼如下:
"" + "[object Object]"
結果是 “[object Object]”。
四、小括號也和它們相加試試
突發(fā)奇想!好吧,小括號雖然有多義性,但它不能作為運算數(shù)。
相關文章
拖動Html元素集合 Drag and Drop any item
拖動Html元素集合 Drag and Drop any item...2006-12-12OpenLayers3實現(xiàn)地圖鷹眼以及地圖比例尺的添加
這篇文章主要為大家詳細介紹了OpenLayers3實現(xiàn)地圖鷹眼以及地圖比例尺的添加,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2020-09-09javaScript把其它類型轉(zhuǎn)換為Number類型
在本篇文章里小編給大家整理的是關于javaScript把其它類型轉(zhuǎn)換為Number類型的相關文章,有需要的朋友們學習下。2019-10-10基于Bootstrap實現(xiàn)Material Design風格表單插件 附源碼下載
Jquery Material Form Plugin是一款基于Bootstrap的Material Design風格的jQuery表單插件。這篇文章主要介紹了基于Bootstrap的Material Design風格表單插件附源碼下載,感興趣的朋友參考下2016-04-04