zoukankan      html  css  js  c++  java
  • 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都不能准确判断出正确的类型,都需要进一步的加以判断。

  • 相关阅读:
    JavaScript快速入门-ECMAScript本地对象(String)
    JavaScript快速入门-ECMAScript语句
    Zabbix实战-简易教程--业务类
    [转] STL源码学习----lower_bound和upper_bound算法
    [转] C++中临时对象及返回值优化
    二叉堆,优先队列,二叉树的理解
    [转] GCC __builtin_expect的作用
    [转] __thread关键字
    C++初始化顺序
    [转] shared_from_this 几个值得注意的地方
  • 原文地址:https://www.cnblogs.com/PengZhao-Mr/p/12705977.html
Copyright © 2011-2022 走看看