js判断数据类型
ECMAScript 中的数据类型
6种简单数据类型:Undefined, Null, Number, String, Boolean, Symbol
1种复杂数据类型(其中又可以分为几类):Object, Array, Date, RegExp, Function, 自定义类型
判断数据类型
1.typeof
typeof是检测简单数据类型的最好选择。
var bool = true
var num = 1
var str = 'a'
var und = undefined
var nul = null
var arr = [1,2,3]
var obj = {}
var dat = new Date()
var fun = function(){}
var reg = new RegExp()
console.log(typeof bool); //boolean
console.log(typeof num); //number
console.log(typeof str); //string
console.log(typeof und); //undefined
console.log(typeof nul); //object
console.log(typeof arr); //object
console.log(typeof obj); //object
console.log(typeof dat); //object
console.log(typeof reg); //object
console.log(typeof fun); //function
通过上面的结果可以看出,检测null时返回的是object, 所以在检测简单数据类型时,typeof完全可以适用。但是检测复杂数据类型时,除了检测function时能返回function,其它复杂类型返回的都是object,无法区分。
2.instanceof
如果你想知道对象是不是你想检测的某种复杂类型,可以使用instanceof,自定义的类型可以用这个。
console.log(reg instanceof Object); //true
console.log(reg instanceof RegExp); //true 所用引用类型的值都是Object的实例,所以返回true
3.constructor
console.log(bool.constructor === Boolean);// true
console.log(num.constructor === Number);// true
console.log(str.constructor === String);// true
console.log(arr.constructor === Array);// true
console.log(dat.constructor === Date);// true
console.log(obj.constructor === Object);// true
console.log(fun.constructor === Function);// true
console.log(reg.constructor === RegExp);// true
undefined和null没有contructor属性,constructor不能判断undefined和null
4.Object.prototype.toString.call
全面检测的最好方法
console.log(Object.prototype.toString.call(bool));//[object Boolean]
console.log(Object.prototype.toString.call(num));//[object Number]
console.log(Object.prototype.toString.call(str));//[object String]
console.log(Object.prototype.toString.call(und));//[object Undefined]
console.log(Object.prototype.toString.call(nul));//[object Null]
console.log(Object.prototype.toString.call(arr));//[object Array]
console.log(Object.prototype.toString.call(dat));//[object Date]
console.log(Object.prototype.toString.call(obj));//[object Object]
console.log(Object.prototype.toString.call(fun));//[object Function]
console.log(Object.prototype.toString.call(reg));//[object RegExp]