JavaScript中判断数据类型的方法
- typeof 运算符
- instanceof 运算符
- Object.prototype.toString 方法
1 typeof 运算符
typeof 数值、字符串、布尔值、undefined分别返回number、string、boolean、undefined。
对象返回objecttypeof {} //object typeof [] //object typeof Window //object typeof function a(){} //function typeof null //object
使用typeof 无法区分对象和数组
2 instanceof 运算符
instanceof 可以准确的判断引用数据类型,它的原理是检测构造函数的prototype属性是否在某个实例对象的原型链上
instanceof只能用来判断两个对象是否属于实例关系, 而不能判断一个对象实例具体属于哪种类型
var o = {};
var a = [];
o instanceof Array // false
a instanceof Array // true
使用typeof 和instanceof 都不能完全准确的判断数据类型
3 Object.prototype.toString 方法
Object.prototype.toString({}) // "[object Object]"
Object.prototype.toString.call({}) // 同上结果,加上call也ok
Object.prototype.toString.call(1) // "[object Number]"
Object.prototype.toString.call('1') // "[object String]"
Object.prototype.toString.call(true) // "[object Boolean]"
Object.prototype.toString.call(function(){}) // "[object Function]"
Object.prototype.toString.call(null) //"[object Null]"
Object.prototype.toString.call(undefined) //"[object Undefined]"
Object.prototype.toString.call(/123/g) //"[object RegExp]"
Object.prototype.toString.call(new Date()) //"[object Date]"
Object.prototype.toString.call([]) //"[object Array]"
Object.prototype.toString.call(document) //"[object HTMLDocument]"
Object.prototype.toString.call(window) //"[object Window]"
封装一个全局通用的函数实现数据类型的判断
function getDataType(obj){
return Object.prototype.toString.call(obj).replace(/^\[object (\S+)\]$/, '$1'); // 注意正则中间有个空格
}