typeof 与 instanceof 检测数据类型的区别(初级)

JS里面会用TypeOf与InstanceOf检测数据到底是什么类型的以及是否为空

1.数据类型分为基本数据类型与复杂数据类型

        基本数据类型 String、Number、Boolean、Null、Undefined、Symbol 

        复杂数据类型 Object、Array、Function

2.用Typeof分别对不同的数据类型进行检测下:

 Undefined  声明变量但未赋值

     var a;
     console.log(a) // undefined
     console.log(typeof a) // "undefined"

 Null  声明变量赋值为空

     var a = null;
     console.log(a) // null
     console.log(typeof a) // "object"  * 空对象的引用

       // 解决null比较:
       var a = null
       console.log(a == null) // true
       console.log(a === null) // true

 String 字符串类型

     var a = "a";
     console.log(a) // "a"
     console.log(typeof a) // "string"

  Number 数值类型

     var a = 1;
     console.log(a) // 1
     console.log(typeof a) //  "number"

 Boolean 布尔类型

     console.log(1=="1")  // true
     console.log(1==="1") // false

 Symbol  Symbol类型

     var a = Symbol()
     console.log(typeof a) // "symbol"

 Object   对象类型

     var a = {}
     console.log(typeof a) // "object"

 Function 函数类型

     var a = function(){}
     console.log(typeof a) // "function"

Array  数组类型

     var a = []
     console.log(typeof a) // "Object"

结论:

    Typeof在检测基本数据类型的时候除了null都会返回对应的基本数据类型

    Typeof检测复杂数据类型的时候除了function都会返回Object

3.用instanceof检测的是原型,a instanceof b 表示a是否为b的实例

 

    console.log( [] instanceof Array);  //true
    console.log( {} instanceof Object); //true
    console.log( new Date() instanceof Date); //true

    function Person() { };
    console.log(new Person() instanceof Person); // true

    console.log([] instanceof Object);  //true
    console.log( new Date() instanceof Object);  //true
    console.log( new Person instanceof Object);  //true

 

结论:

    instanceof 只能用来判断两个对象是否属于实例关系, 而不能判断一个对象实例具体属于哪种类型。

    Array.isArray()方法判断这个值是不是数组的。

推荐:

     Object.prototype.toString.call()

由此可见,无论是typeof还是instanceof都不能准确判断出正确的类型,都需要进一步的加以判断。

 

posted @ 2020-04-15 16:03  等风来灬  阅读(209)  评论(0编辑  收藏  举报