typeof不能判断出数组和null,而且对于通过new操作符生成的对象,也无法判断类型。
至于instanceof,因为在JavaScript中,所有对象都是object,也就是说new Number(2)或new String('hello')也是object,故无法判断。
但Object.prototype.toString对任何变量会永远返回这样一个字符串"[object class]",而这个class就是JavaScript内嵌对象的构造函数的名字。至于用户自定义的变量,则class等于object。因此通过
Object.prototype.toString.apply(obj)可以准确的获取变量数据类型。通过Object.prototype.toString可以获得的数据类型包括:Date, Object, String, Number, Boolean, Regexp, Function, undefined, null, Math等。
至于instanceof,因为在JavaScript中,所有对象都是object,也就是说new Number(2)或new String('hello')也是object,故无法判断。
但Object.prototype.toString对任何变量会永远返回这样一个字符串"[object class]",而这个class就是JavaScript内嵌对象的构造函数的名字。至于用户自定义的变量,则class等于object。因此通过
Object.prototype.toString.apply(obj)可以准确的获取变量数据类型。通过Object.prototype.toString可以获得的数据类型包括:Date, Object, String, Number, Boolean, Regexp, Function, undefined, null, Math等。