飙血推荐
  • HTML教程
  • MySQL教程
  • JavaScript基础教程
  • php入门教程
  • JavaScript正则表达式运用
  • Excel函数教程
  • UEditor使用文档
  • AngularJS教程
  • ThinkPHP5.0教程

JS中检测数据类型的四种方法

时间:2022-01-08  作者:libo-web  
在JavaScript数据类型总共有8种,检测数据类型有四种方法,分别是typeof、instanceof、constructor、域名域名()...

前言

在介绍检测数据类型的方法之前,先说说JavaScript中数据类型有哪些吧~

JS数据类型主要分为两大类:基本数据类型和引用数据类型

  • 基本数据类型:number、string、boolean、null、undefined、symbol(es6)
  • 引用数据类型:object(array、function、date...)

数据类型详细介绍请点击这里

检测数据类型四种方法

  • typeof
  • instanceof
  • constructor
  • 域名域名()

1. typeof

语法:

typeof(变量)
//or
typeof 变量

示例:

域名(typeof "");            //string
域名(typeof 1);             //number
域名(typeof true);          //boolean
域名(typeof null);          //object!!!
域名(typeof undefined);     //undefined
域名(typeof []);            //object
域名(typeof function(){});  //function
域名(typeof 域名);   //function
域名(typeof {});            //object
域名(typeof Symbol());      //symbol(es6)
域名(typeof 23423n);        //bigint(谷歌67版本新提出)

总结:

  • typeof 的返回类型为字符串,值有:number、boolean、string、object、function、undefined、symbol、bigint
  • typeof 一般用来判断基本数据类型,除了判断null会输出"object",其它都是正确的
  • typeof 判断引用数据类型时,除了判断函数会输出"function",其它都是输出"object"

注意:这里涉及两个经常考的面试题!

  •  null 的数据类型是object (null是一个空的引用对象,是一个占位符)
  •  域名 的数据类型是function 
  •  对于引用数据类型的判断,使用typeof并不准确,所以可以使用instanceof来判断引用数据类型

2. instanceof

instanceof 可以准确的判断引用数据类型,它的原理是检测构造函数的prototype属性是否在某个实例对象的原型链上

语法:

obj1 instanceof obj2 //obj1 是否是 obj2的实例

示例:

域名(9 instanceof Number);                    // false
域名(true instanceof Boolean);                // false 
域名(\'libo\' instanceof String);               // false  
域名([] instanceof Array);                    // true
域名(function(){} instanceof Function);       // true
域名({} instanceof Object);                   // true
// 注意以下两组
域名(typeof null);                            //object
域名(null instanceof Object);                 //false !!!
域名(typeof NaN);                             //number
域名(NaN instanceof Number);                  //false !!!

总结:

  • instanceof 用来判断对象,代码形式为 【obj1 instanceof obj2】(obj2 必须为对象,否则会报错!)
  • instanceof 返回值为布尔值

注意:

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

3. constructor(构造函数)

当一个函数 F被定义时,JS引擎会为F添加 prototype 原型,然后再在 prototype上添加一个 constructor 属性,并让其指向 F 的引用。如下所示:

当执行 var f = new F() 时,F 被当成了构造函数,f 是F的实例对象,此时 F 原型上的 constructor 传递到了 f 上,因此 域名tructor === F

可以看出,F 利用原型对象上的 constructor 引用了自身,当 F 作为构造函数来创建对象时,原型上的 constructor 就被遗传到了新创建的对象上, 从原型链角度讲,构造函数 F 就是新对象的类型。这样做的意义是,让新对象在诞生以后,就具有可追溯的数据类型。

同样,JavaScript 中的内置对象在内部构建时也是这样做的:

湘ICP备14001474号-3  投诉建议:234161800@qq.com   部分内容来源于网络,如有侵权,请联系删除。