javascript 類型隱式轉換

本文轉自lifeleanote博客: 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

  1. 先調用toString(), 若是返回字符串或原始值則轉成字符串htm

  2. else 調用valueOf()轉成字符串
    對象

對象轉數字blog

  1. 先調用valueOf(), 若是返回原始值, 則轉成數字

  2. 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」?

http://www.ituring.com.cn/article/53351

相關文章
相關標籤/搜索