由於JS的弱類型特性,在進行JS的==, 排序運算符, 加減乘除,在對非原始值進行操作時,都會調用內部的toPrimitive()方法。
// 例外
{} + [] // 0 {}會被認爲代碼塊 故只剩下 +[], +0 0
// 當進行復雜類型轉換時,會會調用toPrimitive()的內部函數
toPrimitive(input,preferedType?)
preferedType是期望轉換的類型
1. 如果input是原始值,直接返回這個值;
2. 否則,如果input是對象,調用input.valueOf(),如果結果是原始值,返回結果;
3. 否則,調用input.toString()。如果結果是原始值,返回結果;
4. 否則,拋出錯誤。
如果轉換的類型是String,2和3會交換執行,即先執行toString()方法。
[] + [] // ""
[] + {} // "[object Object]"