JavaScript 类型转换面试题 10 例精讲:从 `Number([])` 到 `Boolean({})` 的陷阱

发布时间:2026/10/18 6:03:59

JavaScript 类型转换面试题 10 例精讲:从 `Number([])` 到 `Boolean({})` 的陷阱 JavaScript 类型转换面试题 10 例精讲从Number([])到Boolean({})的陷阱1. 为什么Number([])返回 0 而Number([1])返回 1当数组转换为数字时JavaScript 会先调用valueOf()方法。如果返回的不是原始值再调用toString()方法[].toString() // 返回空字符串 [1].toString() // 返回 1空字符串转换为数字会得到 0而 1 转换为数字会得到 1。这就是为什么Number([]) // 0 Number([1]) // 1 Number([1,2]) // NaN (因为 1,2 无法转换为有效数字)2.Boolean({})和Boolean([])为何都返回 true在 JavaScript 中只有以下值会被转换为 falsefalse0(空字符串)nullundefinedNaN所有对象包括空对象和数组在布尔上下文中都会转换为 trueBoolean({}) // true Boolean([]) // true Boolean(new Boolean(false)) // 这也是 true3.5 - 2和5 2的结果为何不同减法运算符 (-) 会强制将操作数转换为数字5 - 2 // 3 (相当于 5 - 2)而加法运算符 () 在遇到字符串时会优先进行字符串连接5 2 // 52 (字符串连接) 5 2 // 52 (数字2被转换为字符串) 5 2 // 52 (数字5被转换为字符串)4. 为什么null undefined返回 true 而null undefined返回 false这是 JavaScript 的宽松相等 () 和严格相等 () 的区别null undefined // true (特殊规则) null undefined // false (类型不同)其他需要注意的情况null 0 // false undefined 0 // false NaN NaN // false (NaN不等于任何值包括它自己)5.[]为何返回 0 而{}返回 NaN一元加号运算符 () 会尝试将值转换为数字[] // 0 // 解析过程 // 1. [].valueOf() 返回数组本身(不是原始值) // 2. [].toString() 返回 // 3. Number() 返回 0 {} // NaN // 解析过程 // 1. {}.valueOf() 返回对象本身 // 2. {}.toString() 返回 [object Object] // 3. Number([object Object]) 返回 NaN6. 为什么!![]返回 true 而!!0返回 false双感叹号 (!!) 是将值转换为布尔值的常用技巧!![] // true (所有对象都为真) !!0 // false这与 Boolean 构造函数的结果一致Boolean([]) // true Boolean(0) // false7.b a a a会得到什么结果这个表达式展示了字符串连接和类型转换的复杂交互b a a a // baNaNa解析步骤a尝试将 a 转换为数字得到 NaN表达式变为b a NaN aNaN 被转换为字符串 NaN最终结果为 baNaNa8. 为什么[] ![]返回 true这个看似矛盾的结果揭示了 JavaScript 类型转换的复杂规则[] ![] // true解析过程![]首先将数组转换为布尔值 (所有对象为 true)然后取反得到 false比较变为[] false根据规则如果一边是对象另一边是布尔值先将布尔值转换为数字比较变为[] 0对象转换为原始值[].valueOf()返回数组本身 →[].toString()返回 比较变为 0空字符串转换为数字 0最终比较0 0返回 true9.parseInt(08)和Number(08)有何不同这两个函数处理前导零的方式不同parseInt(08) // 8 (ES5) Number(08) // 8但在 ES3 中parseInt(08)会返回 0因为它将字符串视为八进制。现代 JavaScript 引擎默认使用十进制解析除非明确指定基数parseInt(08, 10) // 8 (明确指定十进制) parseInt(08, 8) // 0 (八进制解析)10. 为什么{} []返回 0 而[] {}返回 [object Object]这个差异源于 JavaScript 解析器的行为{} [] // 0 ({}被解释为空代码块[]是转换为数字0) [] {} // [object Object] (正常进行字符串连接)在第一个例子中{}被解释为空的代码块而不是对象字面量所以实际执行的是[]结果为 0。而在第二个例子中[]转换为空字符串{}转换为[object Object]连接后得到[object Object]。快速自查清单对象到原始值转换先调用valueOf()如果不是原始值再调用toString()日期对象例外直接调用toString()宽松相等 () 的特殊规则null undefined为 true字符串和数字比较时字符串转换为数字布尔值和其他类型比较时布尔值先转换为数字转换为布尔值为 false 的值false0(空字符串)nullundefinedNaN加法运算符 () 的特殊行为如果任一操作数是字符串进行字符串连接否则将操作数转换为数字进行加法运算一元加号 () 和减号 (-) 运算符强制将值转换为数字new Date()获取时间戳的常用方法
延伸阅读

更多相关文章

2026/10/16 21:58:18

AI编程CLI两种配置方案(macOS专用)

文章目录方案一:CC-Switch自动配置(推荐,一键切换多模型)1. 前置确认2. 接入DeepSeek完整配置步骤3. 切换&验证生效4. 托盘快捷切换方案二:手动原生配置(不使用CC-Switch,仅单模型固定&…

2026/10/18 9:32:31

Java版Personal Agent实战:基于Spring Boot与Spring AI构建生产级智能体

1. 这个 Java 版 Personal Agent 到底解决了什么问题1.1 从“调个 API”到“跑一个 Agent”,中间差了什么过去一年,围绕大模型的工程实践基本分成了两条路。一条是 Python 生态里各种 Agent 框架快速迭代,另一条是 Java 生态里大量业务系统想…

2026/10/18 9:32:31

Oracle 11.2.0.3 GI PSU 终极补丁 p20996944 安装与避坑指南

简介:本资源为 Oracle 11.2.0.3 版本最后一个 GI(Grid Infrastructure)PSU 补丁包,版本号 .15,同时包含数据库组件,适用于仍在使用该版本、需要完成安全加固与稳定性维护的 DBA 及运维人员。补丁包文件名 p…

2026/10/18 9:32:31

Oracle 11.2.0.3 GI PSU .15 补丁安装全流程与避坑指南

简介:本资源为 Oracle 11.2.0.3 版本最后一个包含数据库组件的 GI(Grid Infrastructure)PSU 补丁包,版本号 .15,对应补丁编号 p20996944,适用于 Linux x86-64 平台。面向需要维护 Oracle 集群与数据库环境、…

2026/10/18 9:32:31

大数据并行度调优:从原理到实操的资源匹配之道

大数据架构里的并行度调优,说到底就是一件事:在有限的计算资源下,把任务拆分得刚刚好,让每一份资源都被高效利用,而不是互相等待或抢来抢去。很多刚接触分布式计算的人,一上来就被“并行度”“分区数”“并…

2026/10/18 9:27:31

ComfyUI循环运行流:批处理与Python脚本实现自动化出图

接触ComfyUI有一段时间以后,你会发现真正拖慢出图速度的往往不是模型本身,而是反复执行同一套流程:同一张风格图要跑十几次微调、一批素材要逐张做预处理、一个工作流要依次处理不同提示词。手动一张一张拖进去点执行,效率很低&am…

2026/10/18 0:01:50

金融AI落地指南:从调研报告到技术选型与工程实践

简介:这份PDF报告聚焦2025年金融服务业中国AI现状与趋势,面向金融科技从业者、AI战略规划人员及关注行业数字化转型的研究者,帮助读者把握生成式AI在银行、支付、交易等场景中的落地路径与投资方向。资源包内含1个PDF文件,大小约1…

2026/10/18 0:01:50

金融AI落地指南:从调研报告到技术选型与工程实践

简介:这份PDF报告聚焦2025年金融服务业中国AI现状与趋势,面向金融科技从业者、AI战略规划人员及关注行业数字化转型的研究者,帮助读者把握生成式AI在银行、支付、交易等场景中的落地路径与投资方向。资源包内含1个PDF文件,大小约1…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑