数据类型的检测在工作中是我们常常遇到的一个问题,今天来和大家介绍一下小编常用哪些方法来检测数据类型吧!
首先和大家介绍一下Js的数据类型有哪些?
基本数据类型: 也叫简单数据类型,包含7种类型,分别是Number 、String、Boolean、BigInt、Symbol、Null、Undefined。
引用数据类型: 也叫复杂数据类型,通常用Object代表,普通对象,数组,正则,日期,Math数学函数都属于Object。
下面介绍一下四种检测数据类型的方法:
1、typeof
对于基本数据类型判断是没有问题的,但是遇到引用数据类型(如:Array)是不起作用
console.log(typeof 2); // number
console.log(typeof 'a'); // string
console.log(typeof true); // boolean
console.log(typeof null); // object (这里检测引用数据类型及undefined,输出都是object)
2、instanceof
只能正确判断引用数据类型 而不能判断基本数据类型,其内部运行机制是判断在其原型链中能否找到该类型的原型
console.log([] instanceof Array); // true
console.log(function(){} instanceof Function); // true
console.log({} instanceof Object); // true
console.log(’a‘ instanceof string); // false
3、constructor
似乎完全可以应对基本数据类型和引用数据类型 但如果声明了一个构造函数,并且把他的原型指向了 Array 的原型,所以这种情况下,constructor 也显得力不从心
console.log((true).constructor === Boolean); // true
console.log(('str').constructor === String); // true
console.log(([]).constructor === Array); // true
console.log((function() {}).constructor === Function); // true
console.log(({}).constructor === Object); // true
console.log((2).constructor === Number); // true
4、Object.prototype.toString.call()
完美的解决方案,可以通过toString() 来获取每个对象的类型
var a = Object.prototype.toString;
console.log(a.call(2)); //[object Number]
console.log(a.call(true)); //[object Boolean]
console.log(a.call('str')); //[object String]
console.log(a.call([])); //[object Array]
console.log(a.call(function(){})); //[object Function]
console.log(a.call({})); //[object Object]
console.log(a.call(undefined)); //[object Undefined]
console.log(a.call(null)); //[object Null]