参加公司技术嘉年华第一季(前端、服务端)的间隙,陈导问了我一个问题:{}+[] 和 []+{}两个表达式的值分别是什么?根据个人理解我以为结果应该都是"[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'
|