类型判断封装
// 目前最好的办法是用 Object.prototype.toString.call(),所以其他 typeof constructor instanceof 就不一一细说了,有机会针对性写一下
//获取准确的类型
console.log(Object.prototype.toString.call('123')) //[object String]
// 这样的话我们就有必要做一个通用方法 接下来一步一步来
// checkType('123') //能得到正确的结果 需要怎么做呢
//通常我们这么做
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().... 这样还能防止使用者 写错参数 例如类型全写小写了 等等
//还想使用者尽量少的传入参数,毕竟 类型是固定的
let types = ['String','Number','Object','Array','Function','Boolean']
let typeUtil = {}
// 既然我们只需要传入一个参数,那么type是需要内置的
// 需要改造checkType函数
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))
网友评论