map、filter、sort 链式处理会创建几份数组,怎样减少中间分配?
用身份断言区分 map/filter 创建结果和 sort 修改当前数组,展示受控纯转换的循环融合,说明回调顺序、空位和副作用可能破坏等价性,并讨论峰值内存与可读性。
JavaScript面试题第 2 页,显示第 51–100 题,共找到 285 道完整解析,可继续按分类、标签与关键词缩小范围。
按稳定语义路径排序
用身份断言区分 map/filter 创建结果和 sort 修改当前数组,展示受控纯转换的循环融合,说明回调顺序、空位和副作用可能破坏等价性,并讨论峰值内存与可读性。
比较数组品牌检查与原型链判断,用伪造原型和 TypedArray 反例说明 instanceof 的边界,解释 iframe/realm 各自构造器,以及数组身份与元素内容验证的区别。
用固定标签序列手写可重复遍历的普通对象,解释 iterable 与 iterator、next 返回对象和 done 边界,验证两个独立游标,并讨论提前退出与资源清理。
本题解释类数组对象定义(length和索引),对比 arguments 与数组在原型链与方法上的差异,并说明用 Array.from 转换的机制与适用条件。
用带括号的字符串折叠展示 reduce 与 reduceRight 的求值方向,区分反向遍历与反转最终结果,说明初始值、函数组合、空位和副作用对结果的影响。
用同一回调中的追加、删除和改值复现数组迭代规则,区分初始长度上界与实时属性读取,说明原范围内新增位置和前移元素,以及快照或延迟变更的替代方案。
用同一数字输入对照默认字符串排序和数值比较器,说明 UTF-16 码元顺序、比较器符号、原地修改与无效数字,并区分本地化字符串排序和稳定排序。
sort 会修改原数组并返回同一引用。通过工单排序示例区分外层数组复制与共享元素,并说明 slice、展开和 toSorted 处理空槽时的差异。
本文对比 splice 与 slice 在修改原数组和参数含义上的区别,涵盖语法、返回值、负索引、稀疏数组行为、典型场景与常见误区,帮助开发者正确选用。
对照自定义分隔符和默认数组字符串转换,说明 null、undefined、空位与嵌套数组的表示,验证改写 join 会影响 toString,并区分展示文本、CSV 和可恢复序列化。
从头部操作改变后续索引解释常见性能差异,区分单次与摊还成本、引擎优化和通用对象行为,展示返回值与数组变化,并讨论队列游标的内存回收策略。
解释 reduce 无初值时寻找首个存在元素的规则,复现过滤后空数组和全空位数组的 TypeError,说明总和、最大值与结构聚合应怎样定义空输入结果。
通过同一数组对照 for...of 与 forEach 的跳过和终止,解释回调 return 的作用域、稀疏数组和 async 回调陷阱,并给出查找、顺序等待与并发处理的选择依据。
对照普通对象读取 toString 和 Map 查询,解释自有属性判断、零值与 undefined 的存在性,说明 null 原型字典和 Map 条目不同于对象属性,并限定其安全作用范围。
用数字形字符串键对照 Map 和 Object.keys,验证更新原键不移动、删除重插进入末尾,说明对象数组索引键规则、Symbol 枚举范围与排序需求的区别。
用字符串键和数字值展示 Map 的条目数组编码与恢复,解释默认空对象、Object.fromEntries 键转换、对象身份和特殊值损失,并要求验证反序列化结构与重复键策略。
验证 Map.set、Set.add 返回当前集合而非新副本,比较 delete 的布尔结果和 clear 的 undefined,说明链式中途失败不回滚,以及 API 设计中可变构建与状态结果的区别。
比较 Map 内部条目数与普通对象自有可枚举字符串键数量,展示更新键不增量、附加属性不计入 size、不可枚举与 Symbol 差异,并解释稀疏数组 length 的边界。
本题解释 Map 与普通对象在键类型上的本质区别:对象键仅字符串或 Symbol,Map 键任意;Map 基于 SameValueZero,无原型链冲突,支持对象键,并提供 size 和直接迭代。回答包含机制、场景与边界分析。
验证 Set 初始展开按插入顺序、重复 add 不移动,以及遍历中删除重插再次访问,解释删除未访问成员和新增成员规则,给出固定批次快照与动态队列的选择。
通过直接数组去重与身份断言解释 SameValueZero,不做隐式类型转换、对象按引用比较,并纠正负零保留插入符号的误解,说明业务主键去重和序列化边界。
从成员查询次数和集合更新频率比较 Set 与数组,区分规范平均次线性要求、常见哈希实现和构建成本,给出复用索引示例及公平测量方法,不提供虚构性能倍率。
从自有索引属性解释空位和显式 undefined,比较 map、filter、展开及 fill 的行为,说明原型索引、JSON null 转换和独立对象初始化,避免用长度代替真实元素数量。
说明数组展开按同步迭代协议收集值,展示浅复制和自定义迭代器改变结果,区分对象展开的属性复制、稀疏数组稠密化以及大数据物化成本。
纠正 WeakMap 只能使用对象的旧结论,说明现代规范允许非注册 Symbol,解释对象元数据、键身份与不可枚举,并区分可回收条件、外部强引用和确定性资源清理。
通过重复对象处理示例说明 WeakSet 的身份标记用途,区分强 Set、现代 Symbol 成员和不可枚举,并解释永久已访问与当前递归路径两种不同的图遍历语义。
围绕“JavaScript 中 ArrayBuffer 与 SharedArrayBuffer 有何区别,分别在什么场景下”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖要求说明 ArrayBuffer 不可共享、SharedArrayBuffer 可被多个代理访问并需原子操作。
围绕“ArrayBuffer 的 transfer 和 slice 方法在处理二进制大数据时有什么不同”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖要求解释 transfer 移动底内存且不复制,slice 创建副本;并指出 transfer 会分离原 buffer。
围绕“如何将 Blob 转换为 ArrayBuffer,以及在此过程中可用的 API 有哪些”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明使用 blob.arrayBuffer() 或 FileReader,且返回 Promise,注意兼容性。
围绕“Blob、File、ArrayBuffer 和 TypedArray 在表示二进制数据时有何关联”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖要求解释 File 继承 Blob,Blob 可创建 ArrayBuffer,且 Blob 是不可变数据。
围绕“为什么在读取二进制数据时可能需要 DataView 而不是类型化数组”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖要求解释 DataView 允许字节序设置,而 typed array 总是平台字节序且不能直接读写非对齐数据。
围绕“JavaScript 中 new Date() 的几种构造器形式(字符串、数字、多参数)各自的时间基准有何不同”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明字符串参数(无时区)按本地或 UTC 取决于格式,多参数按本地时间,数值按 UTC 1970 起亿毫秒。
围绕“处理夏令时切换时使用 Date 应留意什么——如何避免在本地时间缺失的时段进行运算”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖要求指出当遇到不存在的本地时间(如 02:30 被跳过),Date 可能返回 03:30,需用 UTC 方法或库。
围绕“JavaScript Date 对象存储的是时间戳还是本地时间,为什么时区会影响字符串输出”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖解释 Date 内部存储毫秒时间戳,getHours 与 getUTCHours 的差异,date 字符串可能受本地时区影响。
本文解析为何用比较操作无法获知 Date 是否无效,说明通过 getTime() 与 Number.isNaN 检测的原理,并给出表单输入解析场景中的处理步骤及边界条件。
围绕“JavaScript Date 的 setHours 与 setUTCHours 对日期偏移的影响有何不同”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖要求解释本地时区与 UTC 方法修改时间戳的不同结果以及 DST 可能的影响。
围绕“如何获取用户本地时区相对于 UTC 的偏移量,以及可能遇到的问题”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖要求解释 getTimezoneOffset 返回分钟数且符号相反,并注意 DST 时偏移可变。
围绕“为什么 Date.prototype.toISOString 总是返回 UTC 时间,而 toLocaleStrin”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明 toISOString 固定按 UTC 格式,toLocaleString 使用本地时区并可选项。
围绕“当二进制流前包含 BOM 时,TextDecoder 如何识别并去除 BOM”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明默认会忽略并移除 BOM,除非设置 ignoreBOM: true 让 BOM 保留在输出。
围绕“JavaScript 中如何按语言感知顺序比较字符串,而不只是按 Unicode 码点”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖要求解释 Intl.Collator 的 compare 方法及 locale 和 options 的影响。
本题解释Intl.DateTimeFormat如何通过timeZone选项将Date对象转换为指定时区的时间字符串,说明IANA时区标识符的用法和不同宿主环境下时区数据完整性的差异,帮助避免使用错误写法。
围绕“Intl.ListFormat 如何根据语言习惯格式化多个项目(如枚举列表)”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖要求使用 format 方法,并说明不同 locale 的连接词和标点规则。
围绕“为什么用 Intl.NumberFormat 格式化货币时推荐使用 currency 选项而不是手动拼接符号”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明自动处理货币符号、位置、千分位、小数位,且支持不同 locale 的约定。
围绕“Intl.NumberFormat 如何支持科学计数法等非默认数字格式”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖要求说明 notation: 'scientific' 可格式化大数,且与 locale 的配合。
围绕“在开发国际化功能时,Intl.PluralRules 如何帮助选择正确的复数形式”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖要求说明 select() 返回的类别如 'one'/'other',以及如何配合 ICU 消息。
围绕“如何使用 Intl.RelativeTimeFormat 将时间描述为“5 分钟前””给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明 new Intl.RelativeTimeFormat(locale).format(value, unit) 的用法及负数表。
围绕“Intl.Segmenter 如何帮助将字符串按语言拆分为单词或句子”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明可用 granularity 为 'grapheme', 'word', 'sentence',并返回迭代器。
围绕“Intl API 如何检测并回退不支持的地区,为什么 fallback 很重要”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明 supportedLocalesOf 返回支持列表,且 locale 协商会按层级回退,否则可能报错。
围绕“JSON.stringify 在处理 BigInt 值时会抛错,如何设计自定义序列化来支持它”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明默认 TypeError,可给对象实现 toJSON 或将 BigInt 转为字符串再序列化。
围绕“JSON.stringify 遇到循环对象会抛出什么错误?除手动处理外,有哪些常用替代方案”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明 TypeError: Converting circular structure to JSON,并提及可检测或使用替代序列化。