字符串與數字的隱式強類型轉換
ES5規範11.6.1節,如果某操作數是字符串或者能夠通過以下步驟轉換爲字符串的話,+將進行拼接操作。
如果其中一個操作數爲對象(包括數組),則先調用ToPrimitive抽象操作,該操作在調用[[DefaultValue]],以數字作爲上下文。
- ToPrimitive
先調用valueOf(),再Tostring轉換爲字符串 - String()
直接調用Tostring
操作 | 操作數類型 | 行爲 |
---|---|---|
+ | ‘12’ + 12 | string+number =>number轉換爲string |
+ | 數組 | valueOf無法得到基本類型,於是調用toString() |
||和&&
ES5規範11.11:
&&和||運算符的返回值並不一定是布爾類型,而是兩個操作數其中一個的值
==寬鬆相等的強類型轉換
- 字符串和數字比較
ES5規範11.9.3.4-5規定
數字和字符串比較,轉換爲數字 - 其它類型和布爾類型比較
11.9.3.6-7規定
布爾類型會先轉換爲數字即ToNumber(x) - null == undefined
- 對象和非對象比較
對象調用ToPrimitive操作