🎬 HoRain云小助手:个人主页
🔥 个人专栏: 《Linux 系列教程》《c语言教程》
⛺️生活的理想,就是为了理想的生活!
⛳️ 推荐
前些天发现了一个超棒的服务器购买网站,性价比超高,大内存超划算!忍不住分享一下给大家。点击跳转到网站。
专栏介绍
专栏名称 | 专栏介绍 |
《C语言》 | 本专栏主要撰写C干货内容和编程技巧,让大家从底层了解C,把更多的知识由抽象到简单通俗易懂。 |
《网络协议》 | 本专栏主要是注重从底层来给大家一步步剖析网络协议的奥秘,一起解密网络协议在运行中协议的基本运行机制! |
《docker容器精解篇》 | 全面深入解析 docker 容器,从基础到进阶,涵盖原理、操作、实践案例,助您精通 docker。 |
《linux系列》 | 本专栏主要撰写Linux干货内容,从基础到进阶,知识由抽象到简单通俗易懂,帮你从新手小白到扫地僧。 |
《python 系列》 | 本专栏着重撰写Python相关的干货内容与编程技巧,助力大家从底层去认识Python,将更多复杂的知识由抽象转化为简单易懂的内容。 |
《试题库》 | 本专栏主要是发布一些考试和练习题库(涵盖软考、HCIE、HRCE、CCNA等) |
目录
⛳️ 推荐
专栏介绍
JavaScript typeof 操作符详解
一、基本用法与语法
二、typeof 返回值详解
三、常见陷阱与局限性
1. null 的错误识别
2. 无法区分数组和普通对象
3. 无法区分其他对象类型
4. 对未声明变量的安全处理
四、正确使用建议
五、总结
JavaScript typeof 操作符详解
一、基本用法与语法
typeof是 JavaScript 的一元操作符,用于返回一个表示数据类型的字符串。其语法为:
typeof operand typeof (operand) // 括号可选,但不影响结果二、typeof 返回值详解
| 类型/值 | typeof 返回值 | 说明 |
|---|---|---|
42 | "number" | 数字类型(包括普通数字、NaN、Infinity等) |
"hello" | "string" | 字符串类型 |
true | "boolean" | 布尔值 |
undefined | "undefined" | 未定义的变量或未初始化的变量 |
Symbol() | "symbol" | ES6 引入的 Symbol 类型 |
9007199254740991n | "bigint" | ES2020 新增的大整数类型 |
null | "object" | 历史遗留问题(错误地返回"object",不是真正的对象类型) |
{} | "object" | 任何对象(包括数组、日期、正则表达式等) |
function(){} | "function" | 任何函数(包括普通函数、类、异步函数、生成器函数等) |
三、常见陷阱与局限性
1. null 的错误识别
typeof null === "object"; // true(JavaScript 历史遗留问题)解决方案:
// 正确判断 null const isNull = (value) => value === null;2. 无法区分数组和普通对象
typeof [] === typeof {}; // true(都返回 "object")解决方案:
Array.isArray([]); // true Array.isArray({}); // false3. 无法区分其他对象类型
typeof new Date() === typeof /regex/; // true(都返回 "object")解决方案:
// 使用 instanceof new Date() instanceof Date; // true /regex/ instanceof RegExp; // true // 或使用 Object.prototype.toString.call() Object.prototype.toString.call([]); // "[object Array]" Object.prototype.toString.call(new Date()); // "[object Date]"4. 对未声明变量的安全处理
typeof undeclaredVariable; // "undefined"(不会抛出 ReferenceError) // 而直接访问 undeclaredVariable 会抛出 ReferenceError应用场景:
if (typeof module !== 'undefined' && typeof module.exports !== 'undefined') { // Node.js 环境 } else { // 浏览器环境 }四、正确使用建议
基本类型检查:
typeof对数字、字符串、布尔值、undefined、symbol、bigint 等基本类型非常可靠typeof 123; // "number" typeof "text"; // "string" typeof true; // "boolean" typeof undefined; // "undefined"处理 null:先检查是否为 null,再使用 typeof
if (value === null) { // 处理 null } else if (typeof value === 'object') { // 处理对象 }检查数组:使用
Array.isArray()而非typeofArray.isArray([1, 2, 3]); // true复杂对象类型检测:使用
Object.prototype.toString.call()function getType(value) { return Object.prototype.toString.call(value); } getType([]); // "[object Array]" getType(new Date()); // "[object Date]"
五、总结
typeof是 JavaScript 中检查基本数据类型的有效工具,但有其局限性:
- ✅ 适用于基本类型(number、string、boolean、undefined、symbol、bigint)
- ✅ 安全检查未声明变量
- ✅ 适用于函数类型检测
- ❌ 无法正确处理 null(返回"object")
- ❌ 无法区分数组和普通对象
- ❌ 无法区分其他特殊对象类型
在实际开发中,应根据需要选择合适的类型检测方法,避免仅依赖typeof进行复杂类型判断。
❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄
💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍
🔥🔥🔥Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙