JavaScript 判断数据类型有哪些方法?

有四种方法:

方法一:typeof

typeof 运算符返回一个字符串,表示操作数的类型。下图是使用 typeof 判断类型的汇总:

可以看到,typeof 判断类型有两个缺点:

对 null 值的判断是 object,这个是历史遗留问题

对 object 的判断区分不出具体的对象类型
方法二: instanceof

instanceof 运算符用于检测构造函数的 prototype 属性是否出现在某个实例对象的原型链上。

// 定义构造函数

function C(){}

function D(){}

var o = new C();

o instanceof C; // true,因为 Object.getPrototypeOf(o) === C.prototype

方法三:Object.prototype.constructor

constructor 属性返回 Object 的构造函数(用于创建实例对象)。

注意:此属性的值是对函数本身的引用,而不是一个包含函数名称的字符串。

所有对象(使用 Object.create(null) 创建的对象除外)都将具有 constructor 属性。在没有显式使用构造函数的情况下,创建的对象(例如对象和数组文本)将具有 constructor 属性,这个属性指向该对象的基本对象构造函数类型。

const o = {}

o.constructor === Object // true

const o = new Object

o.constructor === Object // true

方法四:Object.prototype.toString

Object.prototype.toString 方法返回一个表示该对象的字符串。

const toString = Object.prototype.toString;

toString.call(new Date()); // object Date

toString.call(new String()); // object String

小练习:如何实现 instanceof?

答案:

function myInstanceof(left, right) {

let proto = Object.getPrototypeOf(left); // 获取对象的原型

let prototype = right.prototype; // 获取构造函数的 prototype 对象

// 判断构造函数的 prototype 对象是否在对象的原型链上

while (true) {

if (!proto) return false;

if (proto === prototype) return true;

proto = Object.getPrototypeOf(proto);

}

}

作者:LeetCode

链接:https://leetcode.cn/leetbook/read/javascript-interview-2/7mduie/

来源:力扣(LeetCode)

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

相关推荐
Brilliantwxx15 分钟前
【STM32】 I2C_EEPROM_test 工程(实战篇)
开发语言·stm32·单片机·嵌入式硬件·ecmascript
清水白石00820 分钟前
Python 异步编程深度解析:Cancellation 到底是异常还是控制信号?从 asyncio 取消机制到企业级事务设计最佳实践
开发语言·python
kolyle26 分钟前
万级 QPS 下的 Token 分发系统架构:从 0 到 1 跑通 AI 时代的“水电煤“
开发语言·人工智能·系统架构·token·qps·极智词元·大模型私有化部署
caoerzhong39 分钟前
JeeWMS 开源仓库管理系统 GPL-3.0 合规指南:Java WMS 二次开发前必须弄清的授权边界
java·开发语言·开源·vue
Patrick在香港40 分钟前
Python 审计香港开放数据目录:两个端点差 10 倍,只有 9.3% 的资源标了「最后修改时间」
开发语言·数据库·python·数据分析·api·数据治理·开放数据
LEE41 分钟前
前端转型全栈 01:数据建模,前端最大的盲区
前端·javascript·后端
雪芽蓝域zzs1 小时前
第四十七节:驾驶舱大屏 ECharts 图表集成
前端·javascript·vue.js
Sylvia33.1 小时前
火星数据体育API|一站式接入足球篮球电竞等18+项目实时数据
java·开发语言·python·websocket·游戏
Data_Journal2 小时前
使用 AutoScraper 进行网页抓取:分步教程
大数据·开发语言·数据库·python·scrapy
yume_sibai2 小时前
12-Rust 性能优化指南(性能分析 + 内存优化 + SIMD + 并发优化 + 编译器优化 + 基准测试)
开发语言·性能优化·rust