每日一题:JS进行变量类型判断的方法

138 阅读1分钟
1. typeof

适合的对象:基本数据类型

返回值枚举:number、string、boolean、undefined、symbol、bigint、object、function

原理:不同的对象在底层都表示为二进制,在Javascript中二进制前(低)三位存储其类型信息

注意:typeof null === 'object'

2. instanceof

适合的对象:引用数据类型

返回值枚举:true、false

原理:遍历左边变量的原型链,直到找到右边类型的prototype,如果查找失败,则会返回false,告诉

我们左边变量并非是右边类型的实例。

缺点:检测过程繁琐且对于简单数据类型中的undefined, null, symbol检测不出来

3. Object.prototype.toString.call

适合的对象:通用

返回值枚举:

[object String] [object Number] [object Boolean]

[object Undefined] [object Null]

[object Object] [object Function] [object Array] [object Date] [object RegExp]

原理:Object.prototype上的toString方法可以返回包含数据类型的字符串,当toString方法调用时:

1.如果this的值为undefined,则返回"[object Undefined]".

2.如果this的值为null,则返回"[object Null]".

3.让O成为调用ToObject(this)的结果.

4.让class成为O的内部属性[[Class]]的值.

5.返回三个字符串"[object ", class, 以及 "]"连接后的新字符串.

image.png

4. constructor.name

适合的对象:引用数据类型

返回值枚举:Number/String/Boolean/Symbol/BigInt/Function/Object/Array/Date/RegExp...

原理:获取实例的构造函数,这种方法不会把原型链上的其他类也加入进来,避免了原型链的干扰

注意:不能判断null和undefined。