參加公司技術嘉年華第一季(前端、服務端)的間隙,陳導問了我一個問題:{}+[] 和 []+{}兩個表達式的值分別是什麼?根據個人理解我以爲結果應該都是"[object Object]",可是結果卻並非這樣子的({}+[] = 0 []+{} = '[object Object]'),我就想這不科學呀,一會兒顛覆了我所學過的js知識了。因而我決定搞明白這到底是是什麼與緣由致使的?javascript
第一個參數 | 是不是原始值 |
valueOf
|
toString
|
備註
|
new Obeject()
|
否 |
Object
|
'[object Object]'
|
|
new Number(1)
|
否 | 1 | '1' | 隱式轉換不是對象,可用Object.prototype.isPrototypeOf檢測 |
new Blooean(1)
|
否 | true | 'true' | 隱式轉換不是對象,可用Object.prototype.isPrototypeOf檢測 |
new Date()
|
否
|
1395985229639
|
‘
Fri Mar 28 2014 13:40:29 GMT+0800 (中國標準時間)
’
|
|
new Function('console.log(1);')
|
否
|
function anonymous() { console.log(1); }
|
'
function anonymous() { console.log(1); }
'
|
|
... |
...
|
...
|
...
|
原始值 | 結果 |
null
|
+0
|
undefined
|
NAN |
123
|
123 |
'123' |
123
|
true/false
|
1/+0
|
toString將值轉化成字符串,原始值轉化成字符串以下表(對象參照toPrimitive ):html
原始值 | 結果 |
null
|
'null' |
undefined
|
'undefined' |
123
|
'123' |
'123a' | '123a' |
true/false
|
'true'/'false'
|