<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>阿里巴巴-社招-2年 on Last Stand</title><link>https://amatsuzero.github.io/LastStand/posts/frontend/interview-experiences/experience-62/</link><description>Recent content in 阿里巴巴-社招-2年 on Last Stand</description><generator>Hugo</generator><language>zh-cn</language><lastBuildDate>Mon, 28 Jul 2025 12:14:53 +0000</lastBuildDate><atom:link href="https://amatsuzero.github.io/LastStand/posts/frontend/interview-experiences/experience-62/index.xml" rel="self" type="application/rss+xml"/><item><title>阿里巴巴-社招-2年 · 第 1 轮 · 二面</title><link>https://amatsuzero.github.io/LastStand/posts/frontend/interview-experiences/experience-62/round-100/</link><pubDate>Mon, 28 Jul 2025 12:14:53 +0000</pubDate><guid>https://amatsuzero.github.io/LastStand/posts/frontend/interview-experiences/experience-62/round-100/</guid><description>&lt;blockquote&gt;
&lt;p&gt;← &lt;a href="https://amatsuzero.github.io/LastStand/posts/frontend/interview-experiences/experience-62/round-99/"&gt;第 1 轮&lt;/a&gt; · &lt;a href="https://amatsuzero.github.io/LastStand/posts/frontend/interview-experiences/experience-62/"&gt;返回本次面经&lt;/a&gt; · 已是最后一轮 →&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;本轮要点：&lt;/strong&gt; call、apply和bind、性能优化、浏览器渲染过程、浏览器的缓存机制&lt;/p&gt;
&lt;p&gt;本轮共 10 道题。答案默认折叠，便于先自行作答。&lt;/p&gt;
&lt;h2 id="question-subjective-83d197f5cd81"&gt;1. 假设现在有一个老项目需从React 17升级至React 18，你会怎么做&lt;/h2&gt;
&lt;h3 id="题目要点"&gt;题目要点&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;先升级 react/react-dom 版本，再更改根渲染方式为 &lt;code&gt;createRoot&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;理解 React 18 并发特性，调整相关组件代码&lt;/li&gt;
&lt;li&gt;确认并升级第三方依赖，保证兼容性&lt;/li&gt;
&lt;li&gt;充分测试，监控性能，平滑迁移&lt;/li&gt;
&lt;/ul&gt;
&lt;details&gt;
&lt;summary&gt;参考答案&lt;/summary&gt;
&lt;h2 id="一考察点"&gt;一、考察点&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;理解 React 18 的新特性及其对应用的影响&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;掌握 React 18 升级步骤及兼容性处理&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;了解新版本的渲染机制变化（如并发特性）&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;熟悉常见问题排查与升级风险规避&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="二参考答案"&gt;二、参考答案&lt;/h2&gt;
&lt;h3 id="21-升级前准备"&gt;2.1 升级前准备&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;阅读官方升级指南&lt;/strong&gt;（React 官方文档提供详尽升级说明）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;检查项目依赖版本&lt;/strong&gt;，确保 React 相关依赖（如 ReactDOM、react-scripts 等）兼容 React 18&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;备份代码及建立测试环境&lt;/strong&gt;，保证升级过程可回滚&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="22-主要升级步骤"&gt;2.2 主要升级步骤&lt;/h3&gt;
&lt;h4 id="1升级-react-和-reactdom-版本"&gt;1）升级 React 和 ReactDOM 版本&lt;/h4&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;npm install react@18 react-dom@18
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;或&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;yarn add react@18 react-dom@18
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id="2更新根节点渲染方式"&gt;2）更新根节点渲染方式&lt;/h4&gt;
&lt;p&gt;React 18 引入了新的根 API：&lt;code&gt;createRoot&lt;/code&gt;，替代 React 17 的 &lt;code&gt;ReactDOM.render&lt;/code&gt;。&lt;/p&gt;</description></item><item><title>阿里巴巴-社招-2年 · 第 1 轮 · 一面</title><link>https://amatsuzero.github.io/LastStand/posts/frontend/interview-experiences/experience-62/round-99/</link><pubDate>Mon, 28 Jul 2025 12:07:25 +0000</pubDate><guid>https://amatsuzero.github.io/LastStand/posts/frontend/interview-experiences/experience-62/round-99/</guid><description>&lt;blockquote&gt;
&lt;p&gt;← 已是第一轮 · &lt;a href="https://amatsuzero.github.io/LastStand/posts/frontend/interview-experiences/experience-62/"&gt;返回本次面经&lt;/a&gt; · &lt;a href="https://amatsuzero.github.io/LastStand/posts/frontend/interview-experiences/experience-62/round-100/"&gt;第 1 轮&lt;/a&gt; →&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;本轮要点：&lt;/strong&gt; react hooks、WeakMap 和 WeakSet&lt;/p&gt;
&lt;p&gt;本轮共 12 道题。答案默认折叠，便于先自行作答。&lt;/p&gt;
&lt;h2 id="question-subjective-fb756a4e7c84"&gt;1. ES6相关属性都用过那些&lt;/h2&gt;
&lt;h3 id="题目要点"&gt;题目要点&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;熟悉 ES6 关键新特性和语法糖&lt;/li&gt;
&lt;li&gt;了解特性设计目的，提升代码可维护性和性能&lt;/li&gt;
&lt;li&gt;结合项目场景合理运用，避免滥用带来的副作用&lt;/li&gt;
&lt;li&gt;使用 ESLint 及 Babel 保证兼容性和规范&lt;/li&gt;
&lt;/ul&gt;
&lt;details&gt;
&lt;summary&gt;参考答案&lt;/summary&gt;
&lt;h2 id="一考察点"&gt;一、考察点&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;全面了解 ES6（ECMAScript 2015）新特性&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;掌握模块化、变量声明、函数、对象、数组、字符串、类、Promise 等核心特性&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;能说明特性使用场景、优势及与旧版本对比&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;具备在项目中合理应用 ES6 特性的能力&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="二参考答案"&gt;二、参考答案&lt;/h2&gt;
&lt;h3 id="11-变量声明"&gt;1.1 变量声明&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;let&lt;/code&gt; 和 &lt;code&gt;const&lt;/code&gt;：块级作用域，解决 &lt;code&gt;var&lt;/code&gt; 变量提升和重复声明问题&lt;/li&gt;
&lt;li&gt;推荐使用 &lt;code&gt;const&lt;/code&gt; 声明常量，&lt;code&gt;let&lt;/code&gt; 声明可变变量，避免全局污染&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="12-模板字符串template-literals"&gt;1.2 模板字符串（Template Literals）&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;使用反引号 &lt;code&gt;`&lt;/code&gt; 支持多行字符串和内嵌表达式 &lt;code&gt;${expr}&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;替代传统字符串拼接，提升可读性&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="13-解构赋值destructuring"&gt;1.3 解构赋值（Destructuring）&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;支持数组和对象解构，简化变量赋值&lt;/li&gt;
&lt;li&gt;常用于函数参数处理、数据提取&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="14-箭头函数arrow-functions"&gt;1.4 箭头函数（Arrow Functions）&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;简洁函数表达式，自动绑定 &lt;code&gt;this&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;不可作为构造函数，不绑定 &lt;code&gt;arguments&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;常用于回调和函数简写&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="15-扩展运算符spread和剩余参数rest"&gt;1.5 扩展运算符（Spread）和剩余参数（Rest）&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;扩展运算符 &lt;code&gt;...&lt;/code&gt; 用于数组和对象展开&lt;/li&gt;
&lt;li&gt;剩余参数用于函数参数收集&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="16-对象字面量增强"&gt;1.6 对象字面量增强&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;属性简写、方法简写、计算属性名&lt;/li&gt;
&lt;li&gt;支持简洁声明和动态键名&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="17-类class"&gt;1.7 类（Class）&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;ES6 引入基于原型的语法糖，支持继承、构造函数、静态方法&lt;/li&gt;
&lt;li&gt;提升面向对象编程体验&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="18-promise-和异步编程"&gt;1.8 Promise 和异步编程&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;用于异步流程控制，解决回调地狱&lt;/li&gt;
&lt;li&gt;支持链式调用和错误捕获&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="19-模块module"&gt;1.9 模块（Module）&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;import&lt;/code&gt; 和 &lt;code&gt;export&lt;/code&gt; 语法，支持静态分析和按需加载&lt;/li&gt;
&lt;li&gt;替代传统的 CommonJS、AMD 模块规范&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="110-symbol-类型"&gt;1.10 Symbol 类型&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;新增基本类型，表示独一无二的值&lt;/li&gt;
&lt;li&gt;常用于定义对象的私有属性和常量&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="111-set-和-map-数据结构"&gt;1.11 Set 和 Map 数据结构&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Set：无重复元素集合&lt;/li&gt;
&lt;li&gt;Map：键值对集合，键可以是任意类型&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="112-iterator-和-generator"&gt;1.12 Iterator 和 Generator&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;统一遍历接口&lt;/li&gt;
&lt;li&gt;Generator 生成器函数，用于异步流程和惰性计算&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="113-其他"&gt;1.13 其他&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;for...of&lt;/code&gt; 循环：遍历可迭代对象&lt;/li&gt;
&lt;li&gt;默认参数和函数参数尾逗号&lt;/li&gt;
&lt;li&gt;数组新增方法如 &lt;code&gt;Array.from&lt;/code&gt;、&lt;code&gt;find&lt;/code&gt;、&lt;code&gt;findIndex&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="三常见使用场景及优势"&gt;三、常见使用场景及优势&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;特性&lt;/th&gt;
&lt;th&gt;使用场景&lt;/th&gt;
&lt;th&gt;优势与改进点&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;let&lt;/code&gt;/&lt;code&gt;const&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;代替 &lt;code&gt;var&lt;/code&gt;，块级作用域变量声明&lt;/td&gt;
&lt;td&gt;避免变量提升和作用域污染&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;模板字符串&lt;/td&gt;
&lt;td&gt;拼接复杂字符串和多行文本&lt;/td&gt;
&lt;td&gt;可读性高，减少错误&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;解构赋值&lt;/td&gt;
&lt;td&gt;参数提取、数组拆包、函数返回值拆分&lt;/td&gt;
&lt;td&gt;代码简洁，语义清晰&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;箭头函数&lt;/td&gt;
&lt;td&gt;回调函数、简化函数定义&lt;/td&gt;
&lt;td&gt;自动绑定 &lt;code&gt;this&lt;/code&gt;，代码更短&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;扩展运算符&lt;/td&gt;
&lt;td&gt;数组合并、对象拷贝&lt;/td&gt;
&lt;td&gt;简化代码，避免手动循环&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Promise&lt;/td&gt;
&lt;td&gt;异步请求、链式调用&lt;/td&gt;
&lt;td&gt;解决回调地狱，增强异步流程可读性&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;模块化&lt;/td&gt;
&lt;td&gt;项目拆分、代码复用&lt;/td&gt;
&lt;td&gt;标准化模块，支持静态分析&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Set/Map&lt;/td&gt;
&lt;td&gt;需要高效查找、去重、键值映射的场景&lt;/td&gt;
&lt;td&gt;性能优于传统对象和数组&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="四常见误区或面试陷阱"&gt;四、常见误区或面试陷阱&lt;/h2&gt;
&lt;h4 id="-误区一滥用箭头函数导致-this-绑定错误"&gt;❌ 误区一：滥用箭头函数导致 &lt;code&gt;this&lt;/code&gt; 绑定错误&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;不适合需要动态 &lt;code&gt;this&lt;/code&gt; 的场景（如对象方法）&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="-误区二未充分利用解构赋值写出冗长代码"&gt;❌ 误区二：未充分利用解构赋值，写出冗长代码&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;理解解构赋值提升代码清晰度&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="-误区三promise-误用未捕获异常导致异常丢失"&gt;❌ 误区三：Promise 误用未捕获异常，导致异常丢失&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;应正确使用 &lt;code&gt;.catch&lt;/code&gt; 或 &lt;code&gt;try...catch&lt;/code&gt; 包裹 &lt;code&gt;async/await&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/details&gt;
&lt;h2 id="question-subjective-5fadc194d07e"&gt;2. 为什么WeakMap的键必须是对象&lt;/h2&gt;
&lt;h3 id="题目要点-1"&gt;题目要点&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;WeakMap 键必须是对象，因为弱引用机制只能作用于对象&lt;/li&gt;
&lt;li&gt;对基本类型无法进行弱引用，无法参与垃圾回收机制&lt;/li&gt;
&lt;li&gt;WeakMap 设计用于保存对象私有数据，避免内存泄漏&lt;/li&gt;
&lt;li&gt;与普通 Map 区别在于弱引用和不可枚举特性&lt;/li&gt;
&lt;/ul&gt;
&lt;details&gt;
&lt;summary&gt;参考答案&lt;/summary&gt;
&lt;h2 id="一考察点-1"&gt;一、考察点&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;理解 WeakMap 的设计初衷和底层实现机制&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;掌握 WeakMap 与普通 Map 的区别&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;了解 JavaScript 垃圾回收机制与弱引用的关系&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;能说明 WeakMap 键限制为对象的技术原因及应用场景&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="二参考答案-1"&gt;二、参考答案&lt;/h2&gt;
&lt;h3 id="11-weakmap-的基本概念"&gt;1.1 WeakMap 的基本概念&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;WeakMap 是一种键为对象，值任意的数据结构&lt;/li&gt;
&lt;li&gt;与普通 Map 不同，WeakMap 对键对象的引用是“弱引用”&lt;/li&gt;
&lt;li&gt;当键对象不存在其它引用时，能被垃圾回收器回收，避免内存泄漏&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="12-键必须是对象的原因"&gt;1.2 键必须是对象的原因&lt;/h3&gt;
&lt;h4 id="1弱引用必须指向对象"&gt;1）弱引用必须指向对象&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;JavaScript 的弱引用机制只能对对象类型生效&lt;/li&gt;
&lt;li&gt;基本类型（如字符串、数字）是值类型，无法被弱引用追踪和回收&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="2垃圾回收机制要求"&gt;2）垃圾回收机制要求&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;只有对象才存在垃圾回收标记和生命周期管理&lt;/li&gt;
&lt;li&gt;WeakMap 通过弱引用允许键对象在无外部引用时自动回收&lt;/li&gt;
&lt;li&gt;如果允许基本类型作为键，则无法做到弱引用，违背 WeakMap 设计初衷&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="3设计意图和使用场景"&gt;3）设计意图和使用场景&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;用于存储与对象相关联的私有数据，避免内存泄漏&lt;/li&gt;
&lt;li&gt;例如框架中保存某个 DOM 节点的元数据，DOM 节点销毁时对应数据自动释放&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3 id="13-weakmap-与-map-的区别"&gt;1.3 WeakMap 与 Map 的区别&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;特性&lt;/th&gt;
&lt;th&gt;Map&lt;/th&gt;
&lt;th&gt;WeakMap&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;键类型&lt;/td&gt;
&lt;td&gt;任意类型&lt;/td&gt;
&lt;td&gt;只能是对象&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;是否可枚举&lt;/td&gt;
&lt;td&gt;可遍历所有键值&lt;/td&gt;
&lt;td&gt;不可遍历&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;引用强度&lt;/td&gt;
&lt;td&gt;对键保持强引用，阻止垃圾回收&lt;/td&gt;
&lt;td&gt;对键保持弱引用，不阻止垃圾回收&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;适用场景&lt;/td&gt;
&lt;td&gt;普通键值映射&lt;/td&gt;
&lt;td&gt;关联对象私有数据，自动回收&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h3 id="14-常见误区或面试陷阱"&gt;1.4 常见误区或面试陷阱&lt;/h3&gt;
&lt;h4 id="-误区一认为-weakmap-可以用基本类型作为键"&gt;❌ 误区一：认为 WeakMap 可以用基本类型作为键&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;会导致运行时错误，WeakMap 只能接受对象作为键&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="-误区二误用-weakmap-导致内存泄漏"&gt;❌ 误区二：误用 WeakMap 导致内存泄漏&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;忽略 WeakMap 不可遍历特性，误判数据存在与否&lt;/li&gt;
&lt;/ul&gt;
&lt;/details&gt;
&lt;h2 id="question-subjective-bf18925ca33f"&gt;3. Map支持哪些非对象键&lt;/h2&gt;
&lt;h3 id="题目要点-2"&gt;题目要点&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Map 支持所有基本类型和对象作为键&lt;/li&gt;
&lt;li&gt;包括字符串、数字、布尔值、Symbol、null、undefined&lt;/li&gt;
&lt;li&gt;与 WeakMap 只能用对象键不同，Map 更灵活&lt;/li&gt;
&lt;li&gt;理解键类型和对应的行为差异，避免键冲突&lt;/li&gt;
&lt;/ul&gt;
&lt;details&gt;
&lt;summary&gt;参考答案&lt;/summary&gt;
&lt;h2 id="一考察点-2"&gt;一、考察点&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;理解 JavaScript Map 的键类型及其存储机制&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;掌握 Map 与 WeakMap 键的差异&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;了解基本类型和对象类型作为键的行为和区别&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;能说明非对象键在 Map 中的实际使用场景&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="二参考答案-2"&gt;二、参考答案&lt;/h2&gt;
&lt;h3 id="11-map-键的类型支持"&gt;1.1 Map 键的类型支持&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Map 的键可以是任意值，包括基本类型和对象类型&lt;/p&gt;</description></item></channel></rss>