新特性与手写实现

共 90 题
#

1. Math.sumPrecise 在数值累加精度提升的边界(替代 Kahan 求和)

A sumPrecise 比朴素累加更慢但结果一定精确到每一位
B sumPrecise 与朴素 reduce 累加结果完全一致
C sumPrecise 支持任意精度整数
D Math.sumPrecise 用补偿算法显著降低浮点累加误差,但仍是双精度结果且不能与 BigInt 混用 ✓ 正确答案
#

2. 上线 Temporal/Decorators 前的浏览器支持矩阵、Polyfill 与测试一致性核查

A 特性检测可以省略
B polyfill 与原生实现行为必然完全一致
C 支持矩阵只需看最新浏览器
D 上线新特性需评估浏览器支持矩阵、polyfill 实现质量,并用原生/填充/不支持三态测试保证一致性 ✓ 正确答案
#

3. ES2026 已纳入特性(Map.getOrInsert/getOrInsertComputed、Error.isError、Uint8Array to/from Base64、Array.fromAsync、Math.sumPrecise)的工程价值

A getOrInsert 需要手动先 has 再 set
B getOrInsert/getOrInsertComputed 原子化缓存读写、Error.isError 跨 Realm 判错、Array.fromAsync 物化异步迭代 ✓ 正确答案
C Error.isError 与 instanceof 在任何场景等价
D Array.fromAsync 只能处理同步数组
#

4. import defer 提案(Stage 3)的延迟模块求值

A import defer 把模块求值推迟到首次访问导出时,保持同步访问语义,可优化冷启动 ✓ 正确答案
B import defer 与动态 import() 完全等价
C defer 模块的顶层副作用立即执行
D defer 导入需要 await 才能使用
#

5. Array.fromAsync/Iterator.from 等新迭代协议的工程价值

A fromAsync 与 Promise.all 语义相同
B Array.fromAsync 串行 await 并把异步序列物化为数组,Iterator.from 把类迭代器规范化为标准迭代器 ✓ 正确答案
C Iterator.from 无法处理手写 next 对象
D fromAsync 会并行执行所有异步任务
#

6. TC39 提案阶段(Stage 0-4)的前端工程师参与路径与生产可用性判断

A 提案进入 Stage 3 后不可能再修改
B Stage 1 的 API 已完全确定
C Stage 4 只需要一个实现
D Stage 3 后语义基本冻结但仍有小修,Stage 4 才纳入标准,生产直接使用以 Stage 4 与浏览器支持为准 ✓ 正确答案
#

7. 装饰器(Decorators)提案在 TypeScript 5 与 JavaScript 标准化的进展与差异

A 新装饰器可以直接读取设计:paramtypes
B 新装饰器签名与 legacy 完全相同
C TS 5 默认采用与 TC39 对齐的新装饰器(value, context),legacy 反射元数据与旧框架依赖需评估迁移 ✓ 正确答案
D TS 5 移除了 legacy 装饰器支持
#

8. Record 与 Tuple(不可变数据结构)提案在状态管理与不可变更新的应用

A Tuple 可以修改元素
B Record 与普通对象在比较语义上相同
C Record/Tuple 按值比较且不可变,可用 === 直接判断状态变化,但不能包含对象/函数等可变值 ✓ 正确答案
D Record 可以作为任意可变状态的容器
#

9. 正则灾难性回溯(ReDoS)的成因,嵌套量词与歧义分支的指数级复杂度及排查与修复手段

A 回溯量只与模式长度相关
B ReDoS 只影响旧浏览器
C (a+)+ 的性能与 a+ 相同
D 嵌套量词与歧义分支会在不匹配输入上产生指数级回溯,应简化模式、用占有量词并限制输入 ✓ 正确答案
#

10. 命名捕获组(?<name>...)与 String.prototype.matchAll() 在结构化文本解析的工程应用

A matchAll 返回单个匹配结果
B matchAll 不要求 g 标志
C 命名组只能通过数字索引访问
D 命名捕获组经 groups 对象按名取值,matchAll 需 g 标志并返回含完整信息的迭代器 ✓ 正确答案
#

11. 装饰器(TC39 当前 Stage 3)的语义与 TypeScript legacy decorators 的差异

A 两套装饰器可以混用于同一类
B 新装饰器用 (value, context) 与 addInitializer 注入字段初始化,legacy 改写属性描述符且不能混用 ✓ 正确答案
C legacy 装饰器支持私有字段
D 新装饰器直接修改属性描述符
#

12. Unicode 属性转义(\p{Letter}、\p{Script=Han})与 u/v 标志在国际化正则匹配的边界差异

A v 标志与 u 标志完全等价
B \p 转义可以在无标志模式使用
C \p{Script=Han} 等属性转义需 u/v 标志,v 标志在 u 基础上支持字符类集合运算 ✓ 正确答案
D \p{Letter} 只匹配 ASCII 字母
#

13. String 方法 slice/substr/substring 在处理负索引与长度参数时的边界差异与工程陷阱

A substr 的第二个参数是结束索引
B slice 与 substring 对负索引处理完全相同
C slice 支持负索引且 end 不包含,substring 负值归零并交换参数,substr 的第二个参数是长度 ✓ 正确答案
D 三个方法的参数语义完全一致
#

14. 手写 call/apply 并处理 this 为 null/undefined、原始值包装与 Symbol 作为 this 的边界

A null 作为 this 时函数内 this 为 null(无论严格模式)
B Symbol 作为 this 时保持原始值形态
C 手写 call/apply 需把 null/undefined 替换为全局对象、对原始值 this 装箱,Symbol 作 this 时同样装箱 ✓ 正确答案
D 原始值 this 不需要任何处理
#

15. 手写 new 操作符,原型链绑定、构造函数返回值判断(对象 vs 原始值)与 instanceof 配合

A 构造函数返回 null 会覆盖新建对象
B 构造函数返回任何值都覆盖新实例
C 箭头函数可以作为构造函数
D 手写 new 需绑定原型、构造函数返回对象时用返回值覆盖实例,null 不视为对象返回 ✓ 正确答案
#

16. 手写符合 Promises/A+ 的 Promise,状态机、then 链式调用、微任务调度与 resolvePromise 算法

A 回调返回值被直接忽略
B then 回调可以同步执行
C Promise 可以 resolve 自身
D resolvePromise 需递归吸收 thenable、检测自决议与循环提取,回调经微任务异步执行 ✓ 正确答案
#

17. 手写深拷贝,循环引用(WeakMap 检测)、Symbol 键、特殊对象(Date/RegExp/Map/Set)与原型链保留

A 循环引用会导致深拷贝无限递归且无法处理
B 深拷贝需用 WeakMap 处理循环引用、遍历 Symbol 键、为内置类型写专门分支并决定原型保留策略 ✓ 正确答案
C Symbol 键无需拷贝
D 通用场景手写深拷贝优于 structuredClone
#

18. 手写防抖(debounce)与节流(throttle),leading/trailing 变体、cancel 方法与 flush 立即执行

A flush 与 cancel 等价
B 防抖与节流语义完全相同
C leading 与 trailing 可以同时默认开启且无边界问题
D 防抖合并最后一次调用、节流限制窗口频率,leading/trailing 组合决定首尾执行,cancel/flush 管理生命周期 ✓ 正确答案
#

19. 自定义错误类的继承设计与栈信息保留(Error.captureStackTrace、构造函数中 name 设置),为何直接 throw 字符串是反模式

A 直接 throw 字符串也能保留调用栈
B 自定义错误应 extends Error 并设置 name,用 Error.captureStackTrace 裁剪栈;throw 字符串无法携带栈与类型 ✓ 正确答案
C 自定义错误的 name 默认就是类名
D Error.captureStackTrace 无法裁剪帧
#

20. Error.cause 的链式传播设计,如何在跨层调用中附加错误上下文而不丢失原始堆栈

A 包装错误会覆盖原始堆栈
B cause 只能保存错误消息字符串
C Error.cause 把底层错误挂为原因保留原始堆栈,跨层包装后上报时展开 cause 链定位根因 ✓ 正确答案
D cause 链无法在监控中展开
#

21. window.onerror 与 unhandledrejection 的职责边界与事件参数差异(message/filename/lineno vs reason/promise)

A onerror 也能捕获 Promise 拒绝
B onerror 捕获运行时异常并提供行列号,unhandledrejection 捕获未处理拒绝并提供 reason/promise ✓ 正确答案
C unhandledrejection 提供行列号定位
D 资源加载失败会被 onerror 捕获
#

22. ES2024/ES2025 正式特性(Promise.withResolvers、Object.groupBy、ArrayBuffer.transfer、正则 v flag、Iterator Helpers、Set 方法、RegExp.escape、Float16Array)的应用场景

A groupBy 做数据聚合、Set 方法做集合运算、RegExp.escape 安全转义用户输入,各特性按场景渐进接入 ✓ 正确答案
B RegExp.escape 用于提升正则执行速度
C Float16Array 用于大整数计算
D Iterator Helpers 会立即生成中间数组
#

23. try/catch 无法捕获异步错误的典型场景(忘记 await、回调内抛错、定时器与事件处理器)及全局兜底方案

A try/catch 可以捕获 setTimeout 回调内的抛错
B 忘记 await、回调与定时器内抛错都逃逸 try/catch,需 unhandledrejection/onerror 做全局监控兜底 ✓ 正确答案
C then 回调内抛错会传到外层 try
D 全局兜底可以恢复业务逻辑
#

24. AggregateError 与 Promise.any 的错误聚合语义,如何展开 errors 数组做归因

A any 空输入时拒绝且 errors 为 null
B AggregateError.errors 只含第一个拒绝原因
C Promise.all 的拒绝也是 AggregateError
D Promise.any 全部拒绝时以 AggregateError 聚合,errors 按输入顺序包含所有原因,需展开归一化归因 ✓ 正确答案
#

25. class 语法与原型继承的等价转换(constructor、prototype、隐式 __proto__ 链接、super 调用)

A class 方法可以被 new 调用
B class 声明存在变量提升
C 派生类 constructor 在 super 前可以使用 this
D class 方法挂载于 prototype 且不可枚举,extends 建立原型与构造函数双链,super 依赖 [[HomeObject]] ✓ 正确答案
#

26. 私有字段 #field 与 WeakMap 模拟私有在封装强度、性能、可检测性(#x in obj 品牌检查)上的差异

A 私有字段引擎级封装不可反射泄露,品牌检查 #x in obj 比 instanceof 更可靠,WeakMap 模拟依赖不泄露约定 ✓ 正确答案
B 私有字段可以通过 Object.getOwnPropertySymbols 发现
C WeakMap 模拟的封装强度与私有字段相同
D 品牌检查可以被原型链伪造绕过
#

27. super 的 [[HomeObject]] 绑定机制,为何把方法复制到另一个对象后 super 调用会出错

A super 查找基于方法定义时的 [[HomeObject]],复制到其他对象后 super 仍从原对象原型查找,可能抛错 ✓ 正确答案
B 复制方法后 super 会按新对象原型查找
C [[HomeObject]] 在调用时动态确定
D 箭头函数有自己的 [[HomeObject]]
#

28. 类字段(实例字段与 static 字段)的初始化执行顺序,实例字段初始化相对父类构造函数的时机

A 实例字段在 constructor 体之后初始化
B 派生类实例字段在 super() 之后、本类 constructor 体之前初始化,父类构造调用可覆写方法时字段未就绪 ✓ 正确答案
C static 字段在实例创建时初始化
D 派生类 super() 前可以访问 this
#

29. 静态初始化块(static {})的用途与可访问私有静态成员的特性

A static {} 内无法访问私有静态字段
B static {} 在实例化时才执行
C static {} 在类求值时按位置执行复杂初始化,且位于类内作用域可直接访问私有静态成员 ✓ 正确答案
D static {} 可以声明为 async
#

30. 手写 Promise.all/race/allSettled/any,拒绝聚合(AggregateError)与空数组边界如何处理?

A any 全部拒绝时按输入顺序聚合为 AggregateError,race 空数组永久 pending,all 空数组兑现空数组 ✓ 正确答案
B all 空数组时永久 pending
C any 空数组直接兑现
D allSettled 会在首个拒绝时整体拒绝
#

31. 手写防抖与节流,立即执行选项、取消方法与 this/参数透传的完整实现?

A leading 与 trailing 在同一窗口内都会执行
B 完整实现需处理 this/参数透传、leading/trailing 组合、cancel 清理与 flush 立即执行 ✓ 正确答案
C flush 与 cancel 效果相同
D 防抖不需要记录定时器状态
#

32. 手写 call/apply/bind,bind 返回函数被 new 调用时的行为如何兼容?

A bind 返回函数被 new 调用时 this 仍指向目标 this
B bind 返回函数被 new 调用时 this 应指向新实例,需用 new.target 分流并保留原型链 ✓ 正确答案
C 绑定函数的原型链与目标函数无关
D 箭头函数 bind 后可以被 new
#

33. queueMicrotask 与 TC39 治理流程的协作

A 已部署 API 的语义可以随意修改
B queueMicrotask 只属于 HTML 规范
C TC39 与 WHATWG 互不关联
D queueMicrotask 由 HTML 规范起源、被 TC39 纳入语言标准,双规范交叉引用保证行为一致 ✓ 正确答案
#

34. structuredClone() 与结构化克隆算法,哪些值无法克隆(函数、DOM 节点、Error 等会抛 DataCloneError),循环引用与 TypedArray/Map/Set 如何处理,与手写深拷贝的取舍?

A structuredClone 可以克隆函数
B structuredClone 遇到循环引用抛错
C structuredClone 会保留类实例的原型
D structuredClone 支持循环引用与内置类型但函数/DOM/类实例不可克隆,通用场景优先于手写深拷贝 ✓ 正确答案
#

35. 正则表达式 v flag(unicodeSets)与 u flag 在集合运算与 Unicode 属性的升级

A 集合运算只支持并集
B v 标志与 u 标志能力完全相同
C v 标志在 u 基础上支持字符类集合运算(&& 交集、-- 差集)与 \q 字符串字面量 ✓ 正确答案
D v 模式不需要特性检测
#

36. Decorator Metadata 提案与反射元数据

A 装饰器经 context.metadata 写入,类以 Symbol.metadata 暴露并沿原型链继承,框架运行时可反射读取 ✓ 正确答案
B 元数据存储在实例上
C 子类无法看到父类元数据
D 元数据是运行时可变状态
#

37. ShadowRealm(Stage 3 提案)的隔离执行边界

A ShadowRealm 是并行执行模型
B ShadowRealm 与 iframe 能力相同
C 领域内代码可以访问外部全局变量
D ShadowRealm 提供独立全局的 JS 隔离域,跨界值经克隆或包装,适合轻量沙箱但无 DOM 能力 ✓ 正确答案
#

38. 双冒号绑定 Bind Operator(::)状态与历史包的取合

A :: 提案已进入 Stage 4
B :: 提案因与管道操作符的语义交互与收益考量长期搁置,工程上应使用 bind/箭头函数等价替代 ✓ 正确答案
C 解构方法不会丢失 this
D :: 与 |> 优先级明确无冲突
#

39. Pattern Matching(Stage 2 提案 match(expr) { case... })

A match 与 switch 语义完全相同
B match 表达式按序匹配模式(字面量/对象/数组/绑定),支持 when 守卫,首中生效且应保证穷尽 ✓ 正确答案
C 对象模式只能匹配引用相等
D case 顺序不影响结果
#

40. Error.isError 在跨 Realm/iframe 错误类型判断的工程价值

A instanceof Error 跨 Realm 失效,Error.isError 基于错误对象语义检查,跨 iframe/Worker 可靠 ✓ 正确答案
B Error.isError 与 instanceof 等价
C Symbol.toStringTag 可以伪造 isError 的结果
D Error.isError 只能判断主 Realm 错误
#

41. Explicit Resource Management(using 声明)在资源释放的工程应用

A using 只支持同步资源
B using 在作用域退出时自动调用 [Symbol.dispose] 释放资源,声明式替代手写 try/finally ✓ 正确答案
C 释放顺序与声明顺序相同
D using 声明的作用域退出不会触发释放
#

42. Promise.allSettled、Promise.any 在容错并发的现代实践

A allSettled 会在首个失败时中断全部任务
B allSettled 逐项归因适合批量任务部分失败容错,any 适合任一成功即用的冗余择优 ✓ 正确答案
C any 需要全部成功才返回
D 组合器自带并发上限控制
#

43. Decorator Metadata 在依赖注入与框架集成的工程应用

A 元数据在实例化时写入
B 元数据必须存放在全局注册表
C 子类无法继承父类元数据
D 装饰器把注入/路由信息写入 context.metadata,容器经 Symbol.metadata 反射读取并驱动实例化 ✓ 正确答案
#

44. 类字段(Class Fields)的 private 字段 #field 与 TypeScript private 的差异

A 子类可以访问父类的 #field
B TS private 字段在运行时同样不可访问
C #field 是运行时引擎级私有且外部不可访问,TS private 只编译期检查、产物中是普通属性 ✓ 正确答案
D 两者封装强度相同
#

45. 正则表达式新特性(命名捕获组、Lookbehind、/v flag)的现代应用

A 命名组只能用数字索引访问
B Lookbehind 在正则中必须匹配固定长度且无兼容问题
C 命名组按名提取字段、Lookbehind 零宽断言上下文、v 标志做字符集集合运算 ✓ 正确答案
D v 标志只影响性能不影响语义
#

46. JSON Modules Import Attributes 提案在 JSON 导入的类型安全

A JSON 模块导出可以被任意修改
B JSON 导入不需要类型声明
C JSON 模块需 with { type: "json" } 声明,默认导出只读对象,配合 TS 与打包器获得类型安全与 tree-shake ✓ 正确答案
D Import Assertions 的 assert 语法与 with 等价且兼容
#

47. Float16Array 在 WebGPU 与 ML 模型加载的工程应用

A Float16Array 以半精度存储减半内存带宽,适合 WebGPU 纹理与 ML 权重,但 JS 侧运算有转换开销 ✓ 正确答案
B Float16Array 与 Float32Array 精度相同
C fp16 适合所有数值计算
D WebGPU 不支持半精度数据
#

48. Error.cause 链在错误传播与日志追踪的工程价值

A cause 只能用于浏览器环境
B 包装错误会覆盖原始堆栈
C cause 链让各层附加上下文并保留根因,监控以根因指纹聚合、按 cause 类型决策重试 ✓ 正确答案
D 上报时只需最外层错误信息
#

49. TC39 提案治理流程(Stage 0 → Stage 4)

A Stage 3 需完整规范文本与实现/测试就绪,Stage 4 需多实现通过 test262 并纳入标准 ✓ 正确答案
B Stage 1 即有完整规范文本
C champion 由浏览器厂商单独指定
D 提案进入 Stage 3 后必然到 Stage 4
#

50. Object.groupBy 与 Map.groupBy 在数据聚合的现代实践

A Map.groupBy 的键只能是字符串
B groupBy 可以同时完成聚合统计
C Object.groupBy 返回字符串键对象、Map.groupBy 支持任意类型键,二者只负责分组,聚合需配合 map/reduce ✓ 正确答案
D 分组结果不保留元素顺序
#

51. Temporal API(已纳入 ES2026)相比 Date 的时区、非格里高利历、Duration/Instant 在金融与排程系统的工程价值

A ZonedDateTime 无法处理夏令时
B Temporal 与 Date 的毫秒模型相同
C Temporal 不支持非格里高利历
D Temporal 以 Instant/ZonedDateTime/Duration 等强类型分离时区与日历语义,金融排程计算确定性更高 ✓ 正确答案
#

52. Array.fromAsync 在异步可迭代对象与 for await ... of 的协作场景

A fromAsync 串行 await 异步可迭代序列并支持异步 mapFn,适合物化收集而非流式消费 ✓ 正确答案
B fromAsync 与 Promise.all 一样并行执行
C fromAsync 不支持异步 mapFn
D fromAsync 会在首个拒绝时返回部分结果
#

53. ArrayBuffer 的 transfer()/resize() 在 WebAssembly 内存与音频工作线程的边界

A resize 就地调整可调整缓冲且视图自动跟随,transfer 移动所有权使旧缓冲 detach ✓ 正确答案
B resize 会产生新缓冲
C transfer 后旧引用仍可访问
D 音频工作线程中可以直接 transfer 新缓冲
#

54. Promise.try 在同步抛出异常与异步函数统一捕获错误处理的工程价值

A Promise.try 只处理异步函数
B Promise.try 把同步抛错转为拒绝、吸收返回值,使统一 catch 链与 Promise 组合器安全处理两类错误 ✓ 正确答案
C 同步抛错无法被 Promise.try 捕获
D Promise.try 会延迟执行 fn
#

55. Sync Iterator 与 Async Iterator 协议在 Node.js Streams、Web Streams 与 Observables 的统一抽象

A 提前退出不会触发流的取消
B 流与 Observable 语义完全相同
C 迭代协议只支持同步数据
D Node/Web 流都实现异步迭代协议统一为拉取型序列,Observable 是推送型,二者语义不同可互转 ✓ 正确答案
#

56. Logical Assignment Operators(ES2021)

A ??= 只在 null/undefined 时赋值(0/"" 不触发),||= 对假值赋值,二者都具短路语义 ✓ 正确答案
B ||= 与 ??= 语义完全相同
C 逻辑赋值不会短路
D ??= 会覆盖已有的 0 值
#

57. 字符串不可变性对大字符串拼接性能的影响与 Array.join/StringBuilder 模式的取舍

A + 拼接总是 O(n²) 无法优化
B 字符串不可变使朴素拼接有复制成本,引擎 rope 优化缓解,超大量片段仍建议 Array.join 批量拼接 ✓ 正确答案
C Array.join 一定比 + 慢
D substring 不保留父串引用
#

58. replaceAll 与带 g 标志 replace 在捕获组引用($1、$&, $`)行为差异及函数替换的边界

A 函数替换返回 undefined 会输出空串
B replaceAll 的字符串 pattern 会按正则解析
C replaceAll 正则须带 g 且字符串按字面量全替换,$ 模式与函数替换的参数/返回值语义与 replace 一致 ✓ 正确答案
D replaceAll 忽略所有正则标志
#

59. 正则 sticky(y)标志与 exec() 循环在词法分析器(Tokenizer)中的工程价值

A y 与 g 语义完全相同
B y 标志可以跳过中间文本寻找匹配
C y 失败后 lastIndex 保持不变
D y 标志要求从 lastIndex 精确位置匹配,exec 循环据此逐 token 推进,是词法分析的理想机制 ✓ 正确答案
#

60. 手写 bind,柯里化参数、new 调用忽略 this 与 prototype 链保留的工程边界

A bind 手写需合并柯里化参数、new 调用时用 new.target 覆盖 this 并保留原型链使 instanceof 成立 ✓ 正确答案
B bind 返回函数被 new 时 this 仍指向 bind 目标
C 绑定函数的原型链与目标无关
D 箭头函数 bind 后支持 new
#

61. 手写 EventEmitter,once、removeListener 与内存泄漏防护(setMaxListeners)

A removeListener 无法移除 once 包装的监听器
B once 监听器可以触发多次
C once 通过一次性包装执行后自移除,监听器数量阈值触发泄漏警告,emit 需防迭代中修改 ✓ 正确答案
D 监听器抛错会中断其他监听器且无需处理
#

62. 手写 instanceof,递归查找原型链与 Symbol.hasInstance 自定义的边界

A instanceof 默认沿原型链递归查找右值的 prototype,但会优先调用右值的 Symbol.hasInstance 自定义判定 ✓ 正确答案
B instanceof 只做一次原型比较
C 右值非函数时 instanceof 返回 false
D Symbol.hasInstance 不影响 instanceof 结果
#

63. 资源加载错误为何需要用 window.addEventListener('error', ..., true) 捕获阶段监听,其与 window.onerror 的信息差异

A window.onerror 可以捕获资源加载失败
B 资源加载错误不冒泡,需捕获阶段监听 error,且事件是 Event 而非含行列号的 ErrorEvent ✓ 正确答案
C 资源错误事件包含 message 与行号
D 捕获阶段监听无法拦截资源错误
#

64. Source Map 的原理(VLQ 编码、mappings 字段)与线上压缩栈还原为源码位置的基本流程

A 还原只需要行号不需要列号
B mappings 存的是绝对行列号
C mappings 用分号/逗号分层段、VLQ 编码相对偏移,还原时按段累加把生成行列映射到源码行列 ✓ 正确答案
D source map 可以直接公开上线
#

65. hidden-source-map 配合上报通道的栈解析方案,以及 Source Map 直接暴露的安全风险与访问控制

A 服务端解析无法还原源码行号
B source map 可以安全公开
C hidden 模式会把 map 从产物中删除
D hidden-source-map 不注入引用、由平台持 map 服务端还原栈,且 map 含完整源码需访问控制防泄露 ✓ 正确答案
#

66. Error.isError 与 Object.prototype.toString.call 在跨 Realm(iframe/Worker)错误判定中的各自作用

A 两者判定机制完全相同
B toString.call 无法跨 Realm 工作
C Error.isError 会误判带 message 的普通对象
D Error.isError 按错误对象语义跨 Realm 可靠判定,toString.call 的标签可被 Symbol.toStringTag 伪造 ✓ 正确答案
#

67. error 事件上 preventDefault 对浏览器默认控制台报告与后续冒泡的影响

A preventDefault 会停止事件冒泡
B error 事件上 preventDefault 抑制浏览器默认控制台报告,但不阻止事件继续传播给其他监听器 ✓ 正确答案
C preventDefault 后错误不再被其他监听器收到
D 资源加载错误的 preventDefault 会恢复加载
#

68. Mixin 模式与多重继承的工程取舍(类表达式组合、Symbol 冲突、super 链断裂)

A Mixin 通过类表达式逐层包装组合能力,存在同名覆盖、Symbol 键冲突与 super 的 [[HomeObject]] 绑定断裂风险 ✓ 正确答案
B Mixin 方法与普通继承方法无冲突可能
C super 在 mixin 中始终指向最终基类
D Mixin 是多重继承的语言内建机制
#

69. instanceof 与 Symbol.hasInstance 在自定义类型判定中的协作与覆盖行为

A 自定义 hasInstance 仍需走原型链
B Symbol.hasInstance 只能增强不能覆盖默认行为
C 实例方法也可以影响 instanceof
D instanceof 优先调用右值的 Symbol.hasInstance,static [Symbol.hasInstance] 可完全覆盖默认原型链算法 ✓ 正确答案
#

70. 私有方法、私有 getter/setter 与 #brand-check 模式在防御性编程中的应用

A 品牌检查可以像 instanceof 一样被绕过
B 私有方法/访问器隐藏内部实现,品牌检查 #x in obj 可靠识别本类实例且不可被原型链伪造 ✓ 正确答案
C 私有 getter 可以在类外读取
D 品牌检查在构造完成前不可用
#

71. 继承内置对象(extends Array/Map)的行为与 Symbol.species 对派生构造的影响

A 数组/Map 子类的派生方法默认经 Symbol.species 用子类构造器返回实例,保持类型链,species 可定制返回类型 ✓ 正确答案
B 子类的 map 总是返回基类 Array
C Symbol.species 影响实例的 length 语义
D 数组子类无法覆盖 species
#

72. 用 new.target 检测实现抽象基类(禁止直接实例化)的设计模式

A new.target 守卫可以替代子类实现检查
B new.target 在基类构造中始终指向基类
C 构造函数中判断 new.target 是否等于基类可禁止直接实例化,派生类实例化时 new.target 为派生类通过检查 ✓ 正确答案
D 箭头函数中可以读取 new.target
#

73. 手写 instanceof、new 操作符、Object.create 的模拟实现?

A 手写 Object.create 可用临时构造器转发原型,instanceof 沿原型链查找,new 需处理构造函数返回对象覆盖 ✓ 正确答案
B 手写 new 不需要处理返回值
C Object.create(null) 与 Object.create({}) 等价
D instanceof 模拟不需要遍历原型链
#

74. 实现并发限制的请求调度器(p-limit),Promise 池的核心逻辑?

A 任务失败会阻塞整个队列
B 调度器与 Promise.all 并发策略相同
C 调度器以并发计数加 FIFO 队列实现信号量,任务完成释放许可证驱动队首执行,单任务失败不影响调度 ✓ 正确答案
D 调度器不需要维护运行计数
#

75. 手写数组扁平化(flat)的递归与迭代(栈)两种实现?

A 栈实现无法处理深度参数
B 递归扁平化直观但深嵌套会栈溢出,显式栈迭代无调用栈风险且需逆序压栈保持顺序 ✓ 正确答案
C 递归版本可以处理任意深度
D flat 会把类数组也展开
#

76. WeakRef 与 FinalizationRegistry 的工程边界,弱引用缓存为何可能明明还在却被回收,unregister 时机与 GC 非确定性如何影响缓存与资源清理设计?

A 清理回调时机是确定的
B 弱引用保证对象存活到显式失效
C 弱引用缓存命中与否由 GC 启发式决定,unregister 须在对象存活期调用,关键资源仍需显式释放 ✓ 正确答案
D 对象回收后 unregister 仍然有效
#

77. RegExp.escape(ES2025)在用户输入转义构造正则时的安全价值,与手写转义函数的差异及回退策略

A 手写转义函数总是安全的
B RegExp.escape 按规范转义全部语法字符,手写转义易遗漏集合或过度转义,需特性检测回退 ✓ 正确答案
C RegExp.escape 只转义点号
D 用户输入构造正则不需要转义
#

78. Set.prototype 集合运算(union/intersection/difference/symmetricDifference/isSubsetOf/isSupersetOf/isDisjointFrom)在权限集合、标签筛选与去重场景的工程价值,与手写去重/交差补的对比

A 集合运算会原地修改原 Set
B Set 集合运算按数学语义返回新集合,权限交集、标签差集、对账对称差等场景可声明式表达且性能更优 ✓ 正确答案
C intersection 返回并集
D 手写集合运算没有正确性风险
#

79. TC39 提案治理中 champion 与 reviewer 的角色以及 Stage advance 在企业内 SDK API 设计的参考价值

A 阶段推进不需要交付物门槛
B champion 同时负责评审自己的提案
C TC39 以 champion 推进、reviewer 独立评审、阶段门槛把关,企业 SDK 可借鉴分级发布与弃用周期 ✓ 正确答案
D 破坏性变更可以立即上线
#

80. String.prototype.normalize() 在 Unicode 等价性比较(NFC/NFD/NFKC/NFKD)中的文本去重应用

A normalize 统一 Unicode 等价序列(NFC 规范组合、NFKC 兼容归一),键生成前归一化可正确去重与搜索 ✓ 正确答案
B NFC 与 NFKC 效果完全相同
C 等价序列在 === 下天然相等
D normalize 会改变大小写
#

81. 模板字符串(Tagged Template)在 SQL/HTML 转义与 DSL 构建中的工程实践

A 标签模板把静态片段与插值分离,可统一做 SQL/HTML 转义与 DSL 解析,信任值用标记避免二次转义 ✓ 正确答案
B 标签模板只是语法糖,无结构信息
C 插值位置无法约束,SQL 注入无法防护
D strings 与 strings.raw 完全相同
#

82. 手写扁平化(flat)与数组去重的多种实现(Set/reduce/filter indexOf)的性能对比

A Set 去重无法处理 NaN
B indexOf 去重与 Set 时间复杂度相同
C Set 去重 O(n) 且 NaN 可去重(SameValueZero),indexOf 方案 O(n²),大数据量应选 Set ✓ 正确答案
D 去重语义对所有实现一致
#

83. 手写 curry 与 partial,占位符(hole)支持与 length 属性保留的边界取舍

A 占位符支持不影响填充顺序
B 手写 curry/partial 需实现占位符从左到右填充与参数累积,length 属性在柯里化后语义失真需约定取舍 ✓ 正确答案
C 柯里化后 length 语义保持不变
D 手写实现无法处理参数累积
#

84. Error.stackTraceLimit 在深层异步调用链栈截断中的作用与取值取舍

A stackTraceLimit 只影响已经生成的 Error.stack
B stackTraceLimit 控制捕获帧数,深层异步链需调大以保留根因,但捕获开销与上报体积随之增长 ✓ 正确答案
C 帧数设置不影响性能
D 异步调用不会增加栈帧
#

85. 错误监控 SDK 的采样、去重(fingerprint/堆栈归一化)与面包屑(breadcrumb)设计

A 采样控制成本、堆栈归一化生成指纹聚合去重、环形缓冲面包屑提供错误上下文 ✓ 正确答案
B 指纹应包含行号以区分不同错误
C 采样只影响存储不影响上报
D 面包屑没有容量限制
#

86. 静态成员的继承与实例成员继承在属性查找路径上的差异

A 实例可以沿原型链访问静态成员
B 实例成员沿 prototype 链查找、静态成员沿类构造函数 __proto__ 链查找,两链平行,实例无法访问静态成员 ✓ 正确答案
C 静态继承与实例继承共享同一条链
D 子类无法访问父类静态成员
#

87. ES class 与“组合优于继承”理念的取舍,何时应放弃继承改用组合

A 组合无法实现多态
B 继承永远优于组合
C 只为复用方法也应使用继承
D 继承适合稳定的 is-a 多态关系,复用能力、可变行为与横切能力应优先组合(委托/注入) ✓ 正确答案
#

88. 手写 compose/pipe 函数组合,执行顺序、单参约束、错误传播与 TypeScript 类型推导(Variadic Tuple Types)如何实现?

A compose 与 pipe 顺序相同
B pipe 用 reduce 左到右、compose 用 reduceRight,组合要求单参链并向前传播错误,TS 推导需变长元组或重载 ✓ 正确答案
C 组合函数可以任意多参
D 组合的错误会被吞掉
#

89. Atomics.pause(ES2025)在自旋等待(spin-wait)时的节能提示与编程模式,与 Atomics.wait/notify 的区分

A Atomics.pause 在自旋循环中提示 CPU 让步降低能耗,不阻塞线程;长等待应改用 wait/notify 阻塞 ✓ 正确答案
B pause 与 wait 语义相同
C pause 会阻塞当前线程
D 自旋等待没有功耗问题
#

90. String.prototype.isWellFormed/toWellFormed(ES2024)在外部文本、URL 与查询参数中孤立代理项(lone surrogate)清洗与编码安全的工程价值

A isWellFormed 会修改原字符串
B JS 字符串不可能包含孤立代理项
C encodeURIComponent 可以安全处理孤立代理项
D 孤立代理项会使 encodeURIComponent 抛错或编码损坏,toWellFormed 替换为 U+FFFD 做入口清洗 ✓ 正确答案