浅谈JavaScript的类型判断

最近在看jQuery源码的时候发现通过Object下面的toString()方法判断数据类型非常好使,大概是这样的

var arr = [];
console.log(Object.prototype.toString.call(arr)=='[object Array]');//true

var obj = {};
console.log(Object.prototype.toString.call(obj)=='[object Object]');//true

var date = new Date();
console.log(Object.prototype.toString.call(date)=='[object Date]');//true

var reg = new RegExp();
console.log(Object.prototype.toString.call(reg)=='[object RegExp]');//true

var oNull = null;
console.log(Object.prototype.toString.call(oNull)=='[object Null]');//[true

上面可以看到,可以完美的判断数据类型。

再看一下其他的一些判断数据类型的方法

通过typeof运算符

typeof 主要用来判断基本类型

var a = "a";
console.log(typeof a);//string

var arr = [];
console.log(typeof arr);//object

var obj = {};
console.log(typeof obj);//object

var reg = new RegExp();
console.log(typeof reg);//object

var date = new Date()
console.log(typeof date);//object

var num = 1;
console.log(typeof num);//number

var bo = true;
console.log(typeof bo);//boolean

通过typeof判断数组,对象,日期,正则等一直返回object,并不能把它们区分,typeof的返回值分别有

number string boolean undefined object function

通过instanceof运算符

主要的目的是用来判断引用类型,

console.log([] instanceof Array);//true  

console.log({} instanceof Object);//true  

console.log(/\d/ instanceof RegExp);//true  

console.log(function(){} instanceof Object);//true  

console.log(function(){} instanceof Function);//true


console.log('' instanceof String);//false  
console.log(1 instanceof Number);//false  

instanceof并不能精确判断function 和基本数据类型

标签: 类型判断

添加新评论