1. typeof
typeof
是一个用于检测 JavaScript 的数据类型的操作符。它返回一个字符串,字符串的值可能为以下几种:- boolean
- number
- string
- undefined
- function
- object
- symbol(ES6)
- bigint(ES2020)
- typeof 的怪异行为
- 尽管 NaN 的含义为 “Not a Number”,但通过 typeof 检测其类型依然会返回 “number”
- 另一个特别的数据类型是 null,使用
typeof
检测其类型会返回“object”。这个结果可能令人奇怪,一个比较合理的解释是:由于 null 类型一般用于指代一个 “空” 的对象,因此我们可以认为它也是一个对象,尽管访问它的属性会抛出类型错误。
- 局限性
- 尽管
typeof
对于原始值(基本类型)和的检测非常有用,但在对象识别上,就有点力不从心了。使用typeof
检测 数组和对象 都会返回 “object”,但是这个结果对我们并没有什么用处。因为我们通常不关心一个值是不是对象,而是希望知道它是不是某个类型的实例。 - 在 ES6 的
let
和const
出现之前,typeof
是一个安全的操作,当检测一个变量的类型时,我们不需要关系该变量是否已经定义,对于未定义的变量,会返回一个undefind
值。ES6 之后,在let
或const
定义的变量或常量定义之前使用typeof
检查它们的类型时,则会导致报错。
- 尽管
2. instanceof
instanceof
是一个运算符,它能够检测对象或原始值的包装对象是否是指定构造函数的实例。它的右操作数是一个构造函数,左操作数可以是一个对象,也可以是一个原始值,这时比较的是它的包装对象。它的返回值是一个布尔值,可以用于解决对象识别问题