• 日常开发小汇总(3)js类型判断


    1.typeof 能判断出字符串、数字、方法和undefined,array、null、object判断不出

            let num = 1;
            let str = "x";
            let fn = function user(){}
            let arr = [1,2]
            let obj = {name:"zhangs"}
            let und;
            let nul = null;
            console.log(typeof num) //number
            console.log(typeof str) //string
            console.log(typeof fn)//function
            console.log(typeof und) //undefined
            console.log(typeof arr) //object
            console.log(typeof obj) //object
            console.log(typeof nul) //object
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    1. instanceof 如 a instanceof b, 判断a的原型链上是否有b的原型
            let fn = function user(){}
            let arr = [1,2]
            let obj = {name:"zhangs"}
            let und;
            console.log(fn instanceof Function) //true
            console.log(arr instanceof Array) //true
            console.log(arr instanceof Object) //true
            console.log(obj instanceof Object) //true
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    1. Object.getPrototypeOf() 返回参数的隐式原型 ,感觉有些鸡肋
      Object.getPrototypeOf ([]) === Array.prototype //true

    2. Object.prototype.toString.call()
      这里解释一下为什么Object.prototype.toString 可以调用call方法,首先我们知道call方法来源,它来自Function.prototype,
      在这里插入图片描述
      这是因为Object.prototype.toString 本身是一个方法,是方法它的原型链上就会出现Function的原型对象,所有就有了call方法,这跟一个对象如let obj= {},obj可以使用toString一个意思,因为toString在Object.prototype上。

    let num = 1;
            let str = "x";
            let fn = function user(){}
            let arr = [1,2]
            let obj = {name:"zhangs"}
            let und;
            let nul = null;
            console.log(Object.prototype.toString.call(obj)); //[object Object]
            console.log(Object.prototype.toString.call(fn)); //[object Function]
            console.log(Object.prototype.toString.call(arr)); //[object Array]
            console.log(Object.prototype.toString.call(nul)); //[object Null]
            console.log(Object.prototype.toString.call(und)); //[object Undefined]
            console.log(Object.prototype.toString.call(num)); //[object Number]
            console.log(Object.prototype.toString.call(str)); //[object String]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    这种方式还是挺万能的,没看出来有什么局限性

  • 相关阅读:
    Android 12.0 禁用系统app首次启动动画SplashScreen功能分析
    Java-数据结构-数组
    仿大众点评——秒杀系统部分01
    01.Go语言介绍
    C# web mvc中文件夹的结构和作用
    实验22:轻触开关实验
    小程序分包加载和拓展
    编写脚本一键安装rsyslog
    【LeetCode】79. 单词搜索
    python导入的缓存机制
  • 原文地址:https://blog.csdn.net/weixin_44224712/article/details/132776462