发布时间:2026/7/11 6:17:43
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/7/11 6:17:43

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

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

2026/7/11 7:22:45

2026电力数据采集网关哪家强?核心指标大比拼与选购避坑指南

一、电力数据采集网关:从“数据孤岛”到“智慧枢纽” 在电力系统数字化转型的浪潮中,数据的采集与流通是基础性工程,也是最关键的“最后一公里”。变电站、配电房、光伏电站、工商业园区……数以万计的电力设备每天都在产生海量运行数据&…

2026/7/11 7:22:45

从 CoT 到 ReAct:AI Agent 是怎么“长出来”的

《AI 知识卡片》第 07 期 Agent 不是魔法,是一步步演化来的 现在满世界都在聊“AI Agent”,听起来玄乎。但它其实不是凭空冒出来的黑科技,而是从一个特别朴素的想法,一步步长出来的。搞懂这条演化线,你就搞懂了 Agent…

2026/7/11 7:22:45

C++/Qt 工业协议中的数据类型的选择原则和典型用法。

一、类型对比总结类型符号大小本质在工业协议中的角色char由实现定义(通常有符号)1 字节C 内建字符类型不推荐用于字节操作,(范围 –128 ~ 127)存 ≥128 的值会溢出/符号扩展unsigned char无符号1 字节C 内建无符号字节…

2026/7/11 7:22:45

哔哩下载姬DownKyi:从技术原理到合规使用的完整解析

哔哩下载姬DownKyi:从技术原理到合规使用的完整解析 【免费下载链接】downkyi 哔哩下载姬downkyi,哔哩哔哩网站视频下载工具,支持批量下载,支持8K、HDR、杜比视界,提供工具箱(音视频提取、去水印等&#xf…

2026/7/11 7:17:45

Claude Code与Codex本质区别:AI编程范式选择指南

1. 项目概述:这不是两个工具的简单“拉郎配”,而是AI编程范式的分水岭 你搜“Claude Code和Codex多维度对比”,页面上全是零散的安装报错、中文设置失败、命令行识别不了的截图,还有人发帖问“为什么我敲 claude 没反应”——这…

2026/7/11 5:30:49

国内大模型选型与企业级落地实战指南

我不能提供任何关于访问境外网络信息的技术方案或变通方法。根据中国法律法规和网络管理要求,所有互联网服务必须遵守国家关于网络安全、数据安全和内容安全的规定。ChatGPT及其后续版本(如所谓“GPT-5”)是由境外机构研发的大语言模型&#…

2026/7/11 2:43:05

三步实战方案:高效获取智慧教育平台电子课本PDF的完整流程

三步实战方案:高效获取智慧教育平台电子课本PDF的完整流程 【免费下载链接】tchMaterial-parser 国家中小学智慧教育平台 电子课本下载工具,帮助您从智慧教育平台中获取电子课本的 PDF 文件网址并进行下载,让您更方便地获取课本内容。 项目…

2026/7/10 6:36:15

3个高效策略:快速掌握Axure中文界面配置

3个高效策略:快速掌握Axure中文界面配置 【免费下载链接】axure-cn Chinese language file for Axure RP. Axure RP 简体中文语言包。支持 Axure 11、10、9。不定期更新。 项目地址: https://gitcode.com/gh_mirrors/ax/axure-cn 还在为Axure RP的英文界面感…