这篇文章 判断JS数据类型的四种方法 写的非常好。
个人总结:
最好的方法是使用 Object.prototype.toString.call(参数) 这种方式
为啥不能用像 new Date().toString()?
好多对象都改写了toString方法,每个的实现又不一样,这样调用,还没到Object.prototype就截止了,返回的结果就依据每种实现的不同千奇百怪喽。
例子:
Object.prototype.toString.call('') ; // [object String]
Object.prototype.toString.call(1) ; // [object Number]
Object.prototype.toString.call(true) ; // [object Boolean]
Object.prototype.toString.call(undefined) ; // [object Undefined]
Object.prototype.toString.call(null) ; // [object Null]
Object.prototype.toString.call(new Function()) ; // [object Function]
Object.prototype.toString.call(new Date()) ; // [object Date]
Object.prototype.toString.call([]) ; // [object Array]
Object.prototype.toString.call(new RegExp()) ; // [object RegExp]
Object.prototype.toString.call(new Error()) ; // [object Error]
Object.prototype.toString.call(document) ; // [object HTMLDocument]
Object.prototype.toString.call(window) ; //[object global] window是全局对象global的引用
怎么判断,比如:
Object.prototype.toString.call(null) === '[object Null]'; //true