你觉得现在JavaScript中有多少数据类型。
数据类型
在最新的 ECMAScript 标准定义了 8 种数据类型:
- 7 种原始类型:
- Boolean
- Null
- Undefined
- Number
- BigInt
- String
- Symbol
- 和 Object
然而JavaScript对象(object)类型中内置了多种类型,简单统计如下:
- Object
- Function
- Date
- Array
- Math
- Error
- RegExp
- Set
- WeakSet
- Map
- WeakMap
- GeneratorFunction
所以,JavaScript中至少有18种内置的数据类型或对象。
类型检测
在js中,类型检测的方法有好几个:
- typeof
- Object.prototype.toString.call()
- Array.isArray()
- instanceof
- … …
这里我们主要讨论typeof 与 toString() 方法。
typeof 是类型检测运算符,其检测结果正确但不够精确。如 typeof(null) 、 typeof([1,2,3]) 都返回 “object” 而不是null和array。
而js中每个值或对象都有一个 toString() 方法,当该对象被表示为一个文本值时,或者一个对象以预期的字符串方式引用时自动调用。默认情况下,toString() 方法被每个 Object 对象继承。如果此方法在自定义对象中未被覆盖,toString() 返回 “[object type]"。
所以经常用 Object.prototype.toString.call() 的方式来检测数据类型。也可以简化成({}).toString.call(),对比如下:
所以,类型检测请使用:Object.prototype.toString.call().slice(8,-1).toLowerCase()
参考资料