深刻理解JS数据类型检测

JS 的数据类型

基本数据类型

number 、 string 、 boolean 、 null 、 undefined 、 symbol(ES6新增)数组

引用数据类型

Object ( Array 、 Date 、 RegExp ) 、 Function浏览器

检测数据类型的4种方法

typeof 、 instanceof 、 constructor 、 Object.prototype.toString.call() 函数


typeof

typeof是用于检测数据类型的一元运算符,与+ - * /同样。prototype

检测方法

typeof [value]3d

返回值

包含对应数据类型的字符串code

优缺点

优势

  • 一元运算符使用简单,优先级高

缺点

  • 引用数据类型检测不许确,不能判断出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。cdn

检测方法

[example] instanceof [class]对象

返回值

布尔值blog

优缺点

优势

  • 解决了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数据类型检测的所有内容,若是有误,欢迎指出。

相关文章
相关标签/搜索