JS 的数据类型
基本数据类型
number 、 string 、 boolean 、 null 、 undefined 、 symbol(ES6新增)
引用数据类型
Object ( Array 、 Date 、 RegExp ) 、 Function
检测数据类型的4种方法
typeof 、 instanceof 、 constructor 、 Object.prototype.toString.call()
typeof
typeof是用于检测数据类型的一元运算符,与+ - * /
一样。
检测方法
typeof [value]
返回值
包含对应数据类型的字符串
优缺点
优点
- 一元运算符使用简单,优先级高
缺点
- 对引用数据类型检测不准确,不能判断出object中的对象、数组、时间、正则等方法
- typeof null也为object

被检测的数据类型 | 检测结果 |
---|---|
Symbol | "symbol" |
Number | "number" |
Boolean | "boolean" |
Undefined | "undefined" |
Function | "function" |
Null | "object" |
Object | "object" |
Date | "object" |
RegExp | "object" |
Array | "object" |
instanceof
判断当前实例是否属于某个类,如果是则返回 true,否则返回 false。
检测方法
[example] instanceof [class]
返回值
布尔值

优缺点
优点
- 解决了typeof检测引用数据类型不准确的问题
缺点
- 不能用于处理字面量创建的基本数据类型
- 凡是在原型链上的构造函数,instanceof的返回结果都是true
- 不能检测null和undefined
对于特殊的数据类型 null 和 undefined,他们的所属类分别是 Null 和 Undefined,但是浏览器把这两个类保护起来了,不允许在外面访问使用。
constructor
constructor 为实例原型上的方法,指向它的构造函数。利用这一点,获取某实例的constructor 属性值,检测是否为所属的类,从而进行数据类型检测。
检测方法
[example].constructor===[class]
返回值
布尔值
优缺点
优点
- 可以检测各种引用数据类型
缺点
- null和 undefined 没有constructor属性,这两种类型的数据需要通过其他方式来判断。
- constructor可能因为被改写而导致结果不准确
Object.propotype.toString.call()
检测方法
Object.prototype.toString.call([value])
返回值
字符串,格式为:[Object 当前被检测实例所属的类]
优缺点
优点
- 能检测各种类型
缺点
- 检测结果需要进行“加工”。

封装一个数据类型检测的函数


思维导图

结语
以上就是本篇关于JS数据类型检测的全部内容,如果有误,欢迎指出。