今天原本無心中發現Number
的toString
方法不是徹底的繼承自Object
原型上,而是能夠給其傳參數,這就引發了我比較大的興趣。我就想知道這個傳入的參數到底有啥用?還有Number
上的toString
方法到底和Object
上的toString
方法有啥區別。javascript
Object
對象的toString
返回的就是表示對象數據類型的字符串 [object Object]
,進而咱們能夠根據對象toString
方法使用Object.prototype.toString.call([arry | number | string | ...])
來達到精確判斷數據類型的功能好比:java
const a = []
const b = ''
Object.prototype.toString.call(a) // [object Array]
Object.prototype.toString.call(b) // [object String]
複製代碼
Array
上的toString
方法分爲兩種狀況數組
,
合併成字符串返回例如:const a = [1,2,3,4]
a.toString() // 1,2,3,4
複製代碼
toString
方法const a = [{},{}]
a.toString() // [object Object],[object Object]
const b = [()=>{},()=>{}]
b.toString() // ()=>{},()=>{}
const c = [[1,2],[3,4]]
c.toString() // 1,2,3,4
複製代碼
延申一下,因此咱們徹底能夠經過數組的toString
方法來實現join
的簡單功能函數
Function
上的toString
方法,這個就比較簡單了就是純粹的將函數體做爲字符串返回ui
var a = () => {}
a.toString() // ()=>{}
複製代碼
String
的toString
方法,就是純粹的返回字符串spa
Number
類型的toString
方法Number
類型的toString
方法到底是啥樣的呢?讓咱們來看看prototype
var a = 1
a.toString() // 1
複製代碼
看起來好像也沒有什麼神奇的地方啊~也就是純粹的將number轉換爲字符串而已,彆着急看看下面的例子code
var a = 2
a.toString(2) // 10
複製代碼
是否是很神奇這裏直接將10進制的數轉換爲了二進制數的字符串表示,根據規定這裏toString的參數爲要轉換的進制範圍爲2-36,利用這個特性咱們很容易的就能夠將一個10進制的數轉換爲任意2-36進制。對象
其實這裏的轉換規則還有其餘規定感興趣的能夠看看MDN和ECMA的具體規定繼承