類型判斷封裝
// 目前最好的辦法是用 Object.prototype.toString.call()欠动,所以其他 typeof constructor instanceof 就不一一細(xì)說了,有機會針對性寫一下
//獲取準(zhǔn)確的類型
console.log(Object.prototype.toString.call('123')) //[object String]
// 這樣的話我們就有必要做一個通用方法 接下來一步一步來
// checkType('123') //能得到正確的結(jié)果 需要怎么做呢
//通常我們這么做
function isType(obj){
return Object.prototype.toString.call(obj).slice(8,-1)
}
console.log(isType(123)) //Number 沒問題
//不過我們是封裝 扇单,我們想直接返回Boolean
// 這樣改
// function checkType(obj,type){
// console.log(Object.prototype.toString.call(obj))
// return Object.prototype.toString.call(obj) === `[object ${type}]`
// }
// 測試
console.log(checkType(123,"Number")) //true 沒問題 不過我們不滿足,我們既然是封裝 肯定是使用者怎么簡單怎么來歉提。
// 于是我們想是不是可以這樣 isNumber()绳泉、isString().... 這樣還能防止使用者 寫錯參數(shù) 例如類型全寫小寫了 等等
//還想使用者盡量少的傳入?yún)?shù),畢竟 類型是固定的
let types = ['String','Number','Object','Array','Function','Boolean']
let typeUtil = {}
// 既然我們只需要傳入一個參數(shù)南誊,那么type是需要內(nèi)置的
// 需要改造checkType函數(shù)
function checkType(type){
return (obj)=>{
return Object.prototype.toString.call(obj) === `[object ${type}]`
}
}
types.forEach((type)=>{
typeUtil[`is${type}`] = checkType(type)
})
console.log(typeUtil.isNumber(123))