在 编程中, 正确判断数据类型是必备技能, 也是面试常问的内容。本文将探讨 常用的数据类型判断方法:
- typeof
- instanceof & isPrototypeOf()
- constructor
- Object.prototype.toString.call()
通过了解它们的特点和适用范围, 能够更好地处理不同数据类型的情况, 避免出现错误和提升代码质量
运算符返回一个字符串, 表示操作数的类型, 使用语法:
1.1 规则
下表, 是 针对不同数据类型, 返回的结果值
示例代码如下:
1.2 为什么「typeof null」等于「object」
- 在 中 的结果为 , 这是从 的第一版遗留至今的一个
- 在 最初的实现中, 中的值是由一个表示类型的 和 表示的, 对象的 是 , 由于 代表的是空指针, 在大多数平台下值表示为 , 因此, 的 是 , 因此 也就返回了
- 当然针对这个 曾有一个 的修复提案, 但是被拒绝了, 原因是遗留代码太多了, 如果修改的话影响太广, 不如继续将错就错当个和事老

1.3 为什么「typeof (() => {})」等于 「function」
首先我们需要了解一个小知识, 函数是什么? 为什么被调用?
实际上是 的一个 , 更深点说, 函数是一个可以被调用的对象; 那么它为什么能够被调用呢? 那是因为其内部实现了 方法, 当函数对象被调用时会执行内部方法

那么回到正题, 为什么 会返回 ? 这里主要还是要看 中 是如何区分函数和对象类型的:
- 一个对象如果没有实现 内部方法, 那么它就返回
- 一个对象如果实现了 内部方法, 那么它就返回
1.4 注意事项
- 所有使用 创建的数据, 都会返回 或
- 操作符的优先级高于 等 , 因此, 必要时候记得用括号
在 中我们有 方式可以判断 是否存在于某个 的 上, 通过这种判断就可以帮助我们, 确定 的具体类型; 需要注意的是该方法 , 无法判断 类型
2.1 instanceof
- 介绍: 运算符用于检测 的 属性是否出现在 对象的 上
- 语法: , 返回一个 值
- 示例:
2.2 Object.prototype.isPrototypeOf()
- 介绍: 方法用于检查一个 是否存在于 的原型链中
- 语法: , 返回一个布尔值
- 示例:
关于原型、原型链更多知识可查阅 《原型、原型链》
判断方法跟 相似, 如下图是 、、 之间的一个关系图, 从图可知, 在 中存在 指向 , 那么借用这个特性我们可以用于判断 类型

不同于 , 通过该方式既可以处理 、又能够处理
不同于 , 不能判断
注意: 和 没有 , 所以它是无法检测
关于原型、原型链更多知识可查阅 《原型、原型链》
方法返回一个表示该对象的字符串, 该字符串格式为 , 这里的 就是对象的类型
注意: 对于自定义构造函数实例化出来的对象, 返回的是
默认, 如果一个对象有 属性并且该属性值是个字符串, 那么这个属性值, 会被用作 返回内容的 值进行展示
补充: 一个通用方法, 一行代码获取
- 适合用于判断 , 特别的是: 会返回 、 返回 、其余 都返回
- 可以用于判断引用数据的类型, 同时可判断
- 可用于基本类型、引用类型, 但是不可判断 、, 并且无法判断
- 万能方法, 对于 中所有类型都能够识别出来, 唯一不足的可能是无法判断 (但是问题不大)
- JavaScript 的 typeof 原理小记
- 如何正确判断JS的数据类型
- js判断数据类型常用的6种方法

版权声明:
本文来源网络,所有图片文章版权属于原作者,如有侵权,联系删除。
本文网址:https://www.mushiming.com/mjsbk/8829.html