9、手寫類型判斷函數
手寫完成這個函數:輸入一個對象(value),返回它的類型
js中的數據類型:
- 值類型:String、Number、Boolean、Null、Undefied、Symbol
- 引用類型:Object、Array、Function、RegExp、Date
使用typeOf判斷類型,但是null返回的是object, 只能判斷值類型,其他返回的是object,Object.prototype.toString.call():判斷數據類型
大概思路:
先使用typeof判斷輸入對象的類型,如果是值類型就直接返回typeof識別到的類型,如果不是就要使用Object.prototype.toString.call()返回表示對象類型的字符串。
代碼:
function getType(value){// 對于null要添加一個特殊的檢查if(value === null){return value + "";}// 分兩個方面:直接使用typeof和使用Object.prototype.toString.call// 如果是值類型:、if(typeof value !== 'object'){//小寫return typeof value;}else {// 如果是對象,就要使用Object.prototype.toString.callconst valueContext = Object.prototype.toString.call(value).slice(8 , -1).toLowerCase();return valueContext;}}
為什么要使用call???
Object.prototype.toString
直接調用時,this
默認指向Object.prototype
,因此返回"[object Object]"
。Object.prototype.toString.call(value)
使用call
方法調用時,可以顯式地指定this
的值為value
,因此返回value
的字符串表示。
function getType(value){// 對于null要添加一個特殊的檢查if(value === null){return value + "";}// 分兩個方面:直接使用typeof和使用Object.prototype.toString.call// 如果是值類型:、if(typeof value !== 'object'){//小寫return typeof value;}else {// 如果是對象,就要使用Object.prototype.toString.callconst valueContext = Object.prototype.toString.call(value).slice(8 , -1).toLowerCase();return valueContext;}}
為什么要使用call???
Object.prototype.toString
直接調用時,this
默認指向Object.prototype
,因此返回"[object Object]"
。Object.prototype.toString.call(value)
使用call
方法調用時,可以顯式地指定this
的值為value
,因此返回value
的字符串表示。