Javascript 高阶函数-isType

类型判断封装
    // 目前最好的办法是用 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))

你可能感兴趣的:(Javascript 高阶函数-isType)