确定JavaScript数据类型的几种方法
1、typeof
优点:可以判断基本数据类型,包括Undefined,null;
缺点:不能判断对象数据类型,不能区分Object、function、array。
2、instanceof
A instanceof B:判断A是否为B的实例,返回true或者false。判断A的原型链中是否有原型B。
优点:可以区分对象的数据类型;
缺点:判断基本数据类型Undefined,null时会报错,因为Undefined和null中是否有构造韩函数。
3、constructor
当构造函数F定义时,js引擎会为F添加prototype对象,为prototype对象添加constructor属性。constructor属性会指向F的引用。
var f = new F(), f为F的实例化对象,F的constructor传递给f,f.constructor == F
var f = new F()
f.constructor == F //返回true
举例如下:
4、toString()方法
Object的原型方法toString(),默认返回当前对象的类型
如果对象的类型为对象,就直接使用
如果对象的类型为其他,就需要使用call/apply方法
举例:
Object.prototype.toString.call('') ; // [object String]
Object.prototype.toString.call(1) ; // [object Number]
Object.prototype.toString.call(true) ;// [object Boolean]
Object.prototype.toString.call(Symbol());//[object Symbol]
Object.prototype.toString.call(undefined) ;// [object Undefined]
Object.prototype.toString.call(null) ;// [object Null]
Object.prototype.toString.call(newFunction()) ;// [object Function]
Object.prototype.toString.call(newDate()) ;// [object Date]
Object.prototype.toString.call([]) ;// [object Array]
Object.prototype.toString.call(newRegExp()) ;// [object RegExp]
Object.prototype.toString.call(newError()) ;// [object Error]
Object.prototype.toString.call(document) ;// [object HTMLDocument]
Object.prototype.toString.call(window) ;//[object global] window 是全局对象 global 的引用