前端/移动开发面试题更新 2026-08-05

在 JavaScript 中,WeakMap 与 Map 有哪些不同之处?请说明它们在键的引用、可枚举性、内存管理以及适用场景上的差异。

前端/移动开发技术原理JavaScript

考察说明

考察对 JavaScript 中两种集合类型 Map 和 WeakMap 核心区别的理解,包括键的引用方式、遍历能力和内存管理机制。

回答思路

  1. 【回答框架 1】WeakMap 的键必须是对象,而 Map 的键可以是任意类型,包括原始值。WeakMap 持有键的弱引用,不影响垃圾回收,因此内存管理更友好。
  2. 【回答框架 2】Map 是可迭代的,支持 forEach、keys()、values() 等方法,而 WeakMap 不可迭代,也没有 size 属性,因为它们无法枚举键,目的是防止回收时机不可控。
  3. 【回答框架 3】适用场景上,Map 适合需要遍历键值对的场景,而 WeakMap 常用于存储与对象关联的私有数据或缓存,避免内存泄漏。
  4. 【回答框架 4】由于弱引用特性,WeakMap 中的键可能随时被回收,因此不能依赖其中的数据持久存在。
  5. 【关键点 1】WeakMap 的键必须为对象,Map 键可为原始值或对象。
  6. 【关键点 2】WeakMap 不可迭代,无 size 属性,Map 可迭代且可获取大小。
  7. 【关键点 3】WeakMap 持有弱引用,不影响垃圾回收,适合关联对象数据。
  8. 【易错点 1】误以为 WeakMap 可以枚举或获取大小。
  9. 【易错点 2】将 WeakMap 用于非对象键导致错误。