JavaScript中“+”的陷阱深刻理解

來源:互聯網
上載者:User

一、兩個中括弧相加
[] + []
中括弧沒有語句塊的作用,因此這裡的兩個中括弧就是一個數組。兩個數組(物件類型)相加先要將其轉換成實值型別(基本類型)。
1,轉成實值型別調用valueOf,[]的valueOf()還是自己 複製代碼 代碼如下:var arr = [];
arr.valueOf() === arr; // true

2,轉成字串,[]的toString是Null 字元串 複製代碼 代碼如下:[].toString(); // ""
String([]) // ""

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

二、大括弧和中括弧的相加 複製代碼 代碼如下:{} + []

注意這裡的大括弧仍然不是對象直接量,而是空語句塊。因此可以去掉它,即相當於 複製代碼 代碼如下:+ []

注意,這時由之前看似的兩個運算數變成了實際的單運算數。而“+”運算子當只有一個運算數時只代表一個意思:算術加運算。即這裡沒有字串串連的意思了。
中括弧的toString()是Null 字元串,又相當於 複製代碼 代碼如下:+ ""

“+”代表算術加運算,字串非數字,因此將其轉換成數字類型。Null 字元串轉成數字類型在上一篇提到過,為0。
那麼最後的結果就是0。

三、中括弧和大括弧相加 複製代碼 代碼如下:[] + {}

與上面的對比,只是中括弧和小括弧交換了順序。結果卻不相同。大括弧放到右邊後,與上面討論的大括弧的意義不同了。這裡的大括弧就是一個對象直接量而非語句塊。
“+” 兩邊的運算數轉成實值型別分別是:"" 和 "[object Object]"。這時 "+" 表示字串串連。即 複製代碼 代碼如下:"" + "[object Object]"

結果是 “[object Object]”。

四、小括弧也和它們相加試試
突發奇想!好吧,小括弧雖然有多義性,但它不能作為運算數。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.