浅谈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 和基本数据类型