本文轉自life的leanote博客: http://leanote.com/blog/view/5357c38e1a91087246000001javascript
+單目 轉成數字html
+雙目 轉成字符串(除非是數字+數字=數字)java
當運算符「+」兩邊一個是數字類型,一個是字符串類型時,js引擎規定進行字符串鏈接運算而非算術加運算數組
1 + "a" == "1a"
可是:spa
# 單獨一個+, 使數組轉成數字, 也能夠使字符串轉成數字 +[] == 0 +[1] == 1 +[1, 2] => NAN +"1" == 1 # 雙目+運算, 都轉成字符串操做!!! 1+[] == "1" 1+[2,3] == "12,3" # 一步步轉 1+1+"a" == "2a"
全部對象轉成boolean都是true!!! 包括[]和{}code
對象轉字符串orm
先調用toString(), 若是返回字符串或原始值則轉成字符串htm
else 調用valueOf()轉成字符串
對象
對象轉數字blog
先調用valueOf(), 若是返回原始值, 則轉成數字
else 調用valueOf()
+[] == 0 +{} => NAN // 由於object調用toString()方法獲得"[object Object]"
要記住: +雙目 轉成字符串(除非是數字+數字=數字)
[]+{} == "[object Object]" ""+{} == "[object Object]" {}+"" == 0 // 至關於+"", 會忽略{} {}+0 == 0 // 至關於+0 0+{} == "0[object Object]" // 轉成字符串!! {}+{} == +{} => NAN
JavaScript 把第一個 {}
解釋成了一個空的代碼塊(code block)並忽略了它
http://justjavac.com/javascript/2012/12/20/object-plus-object.html
http://justjavac.com/javascript/2012/05/24/can-you-explain-why-10.html
http://stackoverflow.com/questions/7202157/why-is-10 Why is ++[[]][+[]]+[+[]] = 「10」?