JavaScript中如何检测变量类型

JavaScript中如何检测变量类型

 一、typeof:

  1.对一个值使用typeof会返回下列字符串之一:

    • 'number':表示值为数值型。
    • 'string':表示值为字符串型。
    • 'boolean':表示值为布尔类型。
    • 'undefined':表示值未定义。
    • 'symbol' :表示值为符号。
    • 'object':所有引用类型除了函数类型(function)以外都返回object。
    • 'function':表示为函数型。

  2.使用方法:  

       let num = 15
            let str = '字符串'
            console.log(typeof num);
            console.log(typeof str);

 

  3.缺点:无法分辨出引用类型当中具体什么类型。

 

 

 

  二、instanceof:

  1.对左侧对象是否是右侧构造函数的实例化对象的判断 返回值为Boolean。

  2.使用方法:

            console.log(10 instanceof Number);
            console.log('字符串' instanceof String);
            console.log([] instanceof Array);

  

 

 

 

  3.原理:现在定义一个变量数组。直接在控制台输出数组。可以看到数组当中存在Prototype这个属性,指向的是数组原型对象。而数组下面的Prototype指向的是object。

 

       那么arr的原型链就如下所示:

 

 

     那么现在就很明确了instanceof的原理,如果“右侧”对象存在于“左侧” 的原型链中 就返回true 否则就返回 false   

  4.缺点: 无法判断基本类型变量,而可以对引用类型做出判断。且无法检测undefined与null

 三、constructor:

  1.检测实例和类的关系,从而检测数据类型。引用原来构造函数该对象的函数。因为constructor是Object类型的原型属性,它能够返回当前对象的构造器

  2.使用方法:

            console.log((10).constructor === Number);
            console.log(('字符串').constructor ===String);
            console.log(([]).constructor ===Array);

  

 

 

   3.缺点:无法检测undefined与null

 四、利用Object.prototype.toString:

  1.在Object的原型上有一个方法toString用于检测数据类型。

  2.使用方法:

            let a = Object.prototype.toString
            console.log(a.call(10));
            console.log(a.call('字符串'));
            console.log(a.call([]));

  

 

 

   3.首先明确一点,根据原型链,所有对象都是object的孩子,而只有Object.prototype.toString拥有检测类型的能力。虽然孩子们继承了toString方法但是无法检测类型。

   所以如果想要进行类型判断,就需要调用Object.prototype.toString才可以。

   那么call的作用就是:改变this的指向,将其this指向拥有此方法的对象,就可以调用该方法了 。

posted @ 2022-07-06 20:06  WangED  阅读(349)  评论(0)    收藏  举报