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