JS 检测数据 类型

52 阅读1分钟

typeof 检测

    缺点: 引用数据类型判断的时候不太准确
    <script>
        let num = 0
        console.log(typeof(num))  // number
        console.log(typeof(n))  // object
        console.log(typeof(obj))  // object
    </script>

constructor 检测

    语法: 数据.constructor === 构造函数
           我们可以通过 对比它等于那个构造函数,然后确认它是那个数据类型
    缺点:  undefinednull 不能使用
            constructor  其实就是一个对象内部的一个属性,是有可能被修改的
            
    let arr = []
    let obj = {}

    let num = 100

    console.log(arr.__proto__.constructor === Array)  // true
    console.log(obj.__proto__.constructor === Object)  // true
    console.log(num.__proto__.constructor === Number)  // true

instanceof 检测

    语法: 数据 instanceof 构造函数
    
    缺点: undefinednull  不能使用
            引用数据类型,有可能会被识别 对  对象类型
            
            
    let arr = [1,2]
    let obj = {}
    let num = 123

    console.log(arr instanceof Array)  // true
    console.log(obj instanceof Object)  // true
    console.log(num instanceof Number)  // false

Object.prototype.toString.call() 检测

    Object.prototype.toString.call(要判断数据类型的数据)
    能检测所有类型
    
    
    let arr = []
    let obj = {}
    let num = 100


    console.log(Object.prototype.toString.call(arr))  // [object Array]
    console.log(Object.prototype.toString.call(obj))  // [object Object]
    console.log(Object.prototype.toString.call(num))  // [object Number]