# 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 做入口清洗 ✓ 正确答案