JS中的数据类型分为两类:基本数据类型和用户自定的数据类型。对数据类型的判断遵循以下两个基本原则即可:
- 如果判断的是基本数据类型或javascript内置对象,用
toString
- 如果判断的是自定义类型,用
instanceof
为什么不用typeof呢?看看下面的例子:
1 |
|
typeof null已经是一个众所周知的bug,按下不表。对String类型的判断才是我们的心头大患: 我们希望无论是’123’
还是new String(‘123’)都是同样的string类型,而toString方法正好可以满足这个要求。
由于很多对象都重载了toString方法,因此我们用Object.prototype.toString来判断对象的类型:
1 |
|
如果要更加深入的理解这种用法,推荐大家阅读lodash中isXXX
部分的源码。
相比静态语言,动态语言的类型判断更加灵活。有的时候只要实例满足某些条件,我们也认为它是可接受的
数据类型,这就是所谓的鸭子类型。
关于类型检测的更多细节,还可以读一下这篇文章。