得到一個變量的真實數據類型,能夠經過 Object.prototype.toString.call(xx)。這樣咱們就能夠得到相似 [object Type] 的字符串bash
對象在轉換基本類型時,首先會調用 valueOf 而後調用 toString。而且這兩個方法你是能夠重寫的.ui
let a = {
valueOf() {
return 0
}
}
複製代碼
固然,你也能夠重寫Symbol.toPrimitive ,該方法在轉基本類型時調用優先級最高。spa
let a = {
valueOf() {
return 0;
},
toString() {
return '1';
},
[Symbol.toPrimitive]() {
return 2;
}
}
1 + a // => 3
'1' + a // => '12'
複製代碼
只有當加法運算時,其中一方是字符串類型,就會把另外一個也轉爲字符串類型。其餘運算只要其中一方是數字,那麼另外一方就轉爲數字。而且加法運算會觸發三種類型轉換:將值轉換爲原始值,轉換爲數字,轉換爲字符串。prototype
1 + '1' // '11'
2 * '2' // 4
[1, 2] + [2, 1] // '1,22,1'
// [1, 2].toString() -> '1,2'
// [2, 1].toString() -> '2,1'
// '1,2' + '2,1' = '1,22,1'
複製代碼
對於加號須要注意這個表達式 'a' + + 'b'code
'a' + + 'b' // -> "aNaN"
// 由於 + 'b' -> NaN
// 你也許在一些代碼中看到過 + '1' -> 1
複製代碼