判断数据类型的方法

75 阅读1分钟

判断数据类型

    1. typeof
    • 问题:只能检测基本数据类型
    console.log(typeof('')) //String
    console.log(typeof({})) //Object
    console.log(typeof([])) //Object
    console.log(typeof(null)) //Object
    1. constructor
    • 语法: 数据结构.constructor
    • 问题: null 和 undefined 不能使用
    • 使用场景: 一般用于引用数据类型
    • 潜在问题: 这是原型对象的某一个属性,我们是可以手动更改的
    //  function Person() {}
    //  const p1 = new Person()
    //  console.log(Person.prototype)
    //  console.log(p1.constructor === Person)
     * 1.先在对象自身查找,如果找到直接使用,如果没找到,会去对象的__proto__内部查找
     * 2.相当于去了Person的prototype内部查找
     * */  
    console.log([].constructor === Array) //true
    // console.log(null.constructor === Array) //会报错,不能使用
    // console.log(undefined.constructor === Array) //会报错,不能使用
    console.log({}.constructor === Array) //false
    1. Object.prototype.toString.call(要检测的数据)
    • 返回值:[object 数据类型] (字符串格式的,并且数据类型的首字母是大写)
    • 使用场景:在任意类型都可准确判断,所以大部分情况下都可以使用
    console.log(Object.prototype.toString.call([])) //[object Array]
    console.log(Object.prototype.toString.call({})) //[object Object]
    console.log(Object.prototype.toString.call(null)) //[object Null] console.log(Object.prototype.toString.call(undefined)) //[object Undefined]
    console.log(Object.prototype.toString.call('')) //[object String]
    console.log(Object.prototype.toString.call(123)) //[object Number]