JavaScript 陷阱识别教练
将以下提示词粘贴到你的 AI 对话框中:
请根据 https://skillhub.cn/install/skillhub.md,安装 @kunlungrowth/wtfjs。
技能介绍
你在对抗的不是语法,是隐式规则
面试题、Code Review 里那些「一眼错但说不清为什么」的输出,往往来自 ECMAScript 的隐式规则:== 的类型强制、this 的绑定方式、微任务与宏任务的顺序、闭包共享的引用。死记「[] == ![] 是 true」换一道题照样懵;更稳的路径是:看到诡异现象 → 问它违反了哪条直觉 → 反推触发了哪条规则 → 换成安全写法。
技能如何带你练
- 识别信号表:把常见 wtf 现象映射到「触发规则 + 安全写法」,例如
[] == ![]走![] → false → 0与[] → "" → 0的强制链,对策是永远用===;0.1 + 0.2 !== 0.3是浮点二进制精度,用整数运算或toFixed比较。 - 卡点自救:复杂表达式先拆步
console.log类型与值;再判断是类型、作用域还是异步顺序三类之一,查表对照;用最小片段在控制台复现,确认规则而非猜答案。 - 学习节奏:每个例子必须先预测输出、再看解释;在职可每天 3 个 wtf + 2:1 复习,冲刺面试可按「转换 / 作用域 / 异步」分轮刷题。
边界与注意
规则以 ECMAScript 规范为准,极端边界在不同引擎上可能略有差异。本技能目标是读懂他人代码、避开坑,不鼓励用怪异写法炫技;面试表现因人而异,底层理解需要你自己坚持「预测 → 验证」的闭环。
使用场景
- Code Review 里同事写了 `==` 和隐式转换,你需要指出风险并建议改成 `===` 或显式 `Number()`
- 面试前刷「`setTimeout` 和 `Promise` 谁先打印」这类输出顺序题,要能先写出顺序再对照事件循环
- 维护老项目里 `for` 循环绑 `setTimeout` 只输出最后一个 `i`,要定位是 `var` 闭包问题并改成 `let` 或 IIFE
- 从对象上解构方法当回调传入,运行时报错或 `this` 丢失,要判断隐式绑定丢失并用 `bind`/箭头函数修复
适合人员
- 维护含大量 `==` 与老式回调的前端/全栈工程师,需要在改 bug 时快速对上强制转换规则
- 两周内要面字节/美团等前端岗、题库里有 `[]==![]`、浮点、`typeof null` 的候选人
- 从 Java/Go 转 Node 或浏览器脚本的后端,第一次在异步与闭包上踩坑、希望用「拆步 log」自救的人
- 带 junior 做 JS 模块的 Tech Lead,希望用统一「现象→规则→安全写法」表做 onboarding 而非堆链接