日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

JavaScript中“ ”的陷阱(續(xù))

 陳湖雨_毓 2012-02-28

一、兩個(gè)中括號(hào)相加

Js代碼  收藏代碼
  1. [] + []  

 

中括號(hào)沒有語(yǔ)句塊的作用,因此這里的兩個(gè)中括號(hào)就是一個(gè)數(shù)組。兩個(gè)數(shù)組(對(duì)象類型)相加先要將其轉(zhuǎn)換成值類型(基本類型)。

 

1,轉(zhuǎn)成值類型調(diào)用valueOf,[]的valueOf()還是自己

 

Js代碼  收藏代碼
  1. var arr = [];  
  2. arr.valueOf() === arr; // true  

 

2,轉(zhuǎn)成字符串,[]的toString是空字符串

 

Js代碼  收藏代碼
  1. [].toString(); // ""  
  2. String([]) // ""  

 

好了,結(jié)果出來了。兩個(gè)空字符串相加,結(jié)果仍然是空字符串。即這里的“+”指字符串連接而非數(shù)字相加。

 

 

 

二、大括號(hào)和中括號(hào)的相加

Js代碼  收藏代碼
  1. {} + []  

 

注意這里的大括號(hào)仍然不是對(duì)象直接量,而是空語(yǔ)句塊。因此可以去掉它,即相當(dāng)于

Js代碼  收藏代碼
  1. + []  

 

注意,這時(shí)由之前看似的兩個(gè)運(yùn)算數(shù)變成了實(shí)際的單運(yùn)算數(shù)。而“+”運(yùn)算符當(dāng)只有一個(gè)運(yùn)算數(shù)時(shí)只代表一個(gè)意思:算術(shù)加運(yùn)算。即這里沒有字符串連接的意思了。

 

中括號(hào)的toString()是空字符串,又相當(dāng)于

 

Js代碼  收藏代碼
  1. ""  
   

“+”代表算術(shù)加運(yùn)算,字符串非數(shù)字,因此將其轉(zhuǎn)換成數(shù)字類型??兆址D(zhuǎn)成數(shù)字類型在上一篇提到過,為0。

 

那么最后的結(jié)果就是0。

 

 

三、中括號(hào)和大括號(hào)相加

Js代碼  收藏代碼
  1. [] + {}  

 

與上面的對(duì)比,只是中括號(hào)和小括號(hào)交換了順序。結(jié)果卻不相同。大括號(hào)放到右邊后,與上面討論的大括號(hào)的意義不同了。這里的大括號(hào)就是一個(gè)對(duì)象直接量而非語(yǔ)句塊。

 

“+” 兩邊的運(yùn)算數(shù)轉(zhuǎn)成值類型分別是:"" 和 "[object Object]"。這時(shí) "+" 表示字符串連接。即

Js代碼  收藏代碼
  1. "" + "[object Object]"  

 

結(jié)果是 “[object Object]”。

 

 

四、小括號(hào)也和它們相加試試

 

突發(fā)奇想!好吧,小括號(hào)雖然有多義性,但它不能作為運(yùn)算數(shù)。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多