判断数据类型的方法
# typeof
适用于判断(除null)基础类型,
判断引用类型,除了function 全返回object类型
# instanceof
只能用来判断变量的原型链上是否有构造函数的prototype属性(两个对象是否属于原型链的关系),不一定能获取对象的具体类型
Instanceof 不适用判断原始类型的值,只能用于判断对象是否从属关系
# constructor
每一个实例对象都可通过constructor来访问它的构造函数,其实也是根据原型链的原理来的。
'1'.__proto__.constructor === String // true
(1).__proto__.constructor === Number // true
({}).__proto__.constructor === Object // true
[].__proto__.constructor === Array // true
(function (){}).__proto__.constructor === Function // true
1
2
3
4
5
2
3
4
5
无法判断null、undefined
# toString
Object.prototype.toString方法返回对象的类型字符串,因此可用来判断一个值的类型。
因为实例对象有可能会自定义toString方法,会覆盖Object.prototype.toString,所以在使用时,最好加上call
所有的数据类型都可以使用此方法进行检测,且非常精准
Object.prototype.toString.call('5') // [object String]
Object.prototype.toString.call(5) // [object Number]
Object.prototype.toString.call([5]) // [object Array]
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(new RegExp()); // [object RegExp]
Object.prototype.toString.call(new Error()); // [object Error]
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11