js数据类型判断的方法

148 阅读1分钟

数据类型的检测在工作中是我们常常遇到的一个问题,今天来和大家介绍一下小编常用哪些方法来检测数据类型吧!

首先和大家介绍一下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]