mcpField
F
fact-check

fact-check

github.com/leonardomso测试与质量66.5k333 次安装21 周前更新
代码仓库

关于 fact-check

fact-check 是一项用于核查 JavaScript 概念文档技术准确性的技能。它引导审阅者检查代码示例、MDN 与规范引用、外部资源及正文中的技术主张。

主要功能

  1. 01核对代码输出与行为
  2. 02检查 MDN 链接和 API 描述
  3. 03参照 ECMAScript 规范
  4. 04审阅外部学习资源
  5. 05检查技术主张与常见误解

适用场景

  1. 01发布前审阅新的概念页面
  2. 02重大编辑后核查准确性
  3. 03审核社区贡献

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/leonardomso/33-js-concepts --skill fact-check

安装后在 Claude Code 中输入/fact-check确认已加载。

详细介绍

技能:JavaScript 事实核查员

使用此技能核查 33 JavaScript Concepts 项目的概念文档页面在技术方面的准确性,确保我们不会传播关于 JavaScript 的错误信息。

使用时机

  • 发布新的概念页面之前
  • 对现有内容进行重大修改之后
  • 审核社区贡献时
  • 使用新的 JavaScript 特性更新页面时
  • 定期审查现有内容的准确性

我们要防范的问题

  • 对 JavaScript 行为的不正确描述
  • 过时的信息(将 ES6 之前的模式作为当前做法介绍)
  • 无法产生所述输出的代码示例
  • 失效或具有误导性的外部资源链接
  • 将常见误解当作事实陈述
  • 将特定于浏览器的行为说成通用行为
  • 对 API 的描述不准确

事实核查方法

请按顺序完成以下五个阶段,以进行完整的事实核查。

阶段 1:验证代码示例

必须验证概念页面中的每个代码示例,确保其准确无误。

分步流程
  1. 找出文档中的所有代码块

  2. 对每个代码块:

    • 阅读代码和任何输出注释(例如,// "string")
    • 在脑中执行代码,或在 JavaScript 环境中测试
    • 验证输出是否与注释中所述一致
    • 检查变量名和逻辑是否正确
  3. 对于“错误”示例(标记为 ❌):

    • 验证它们是否确实会产生错误或意料之外的行为
    • 确认对错误原因的解释是否准确
  4. 对于“正确”示例(标记为 ✓):

    • 验证它们是否能按所述方式运行
    • 确认它们是否遵循当前最佳实践
  5. 运行项目测试:

    # Run all tests
    npm test
    
    # Run tests for a specific concept
    npm test -- tests/fundamentals/call-stack/
    npm test -- tests/fundamentals/primitive-types/
    
  6. 检查测试覆盖率:

    • 查看 /tests/{category}/{concept-name}/
    • 验证是否为主要代码示例编写了测试
    • 标记未被测试覆盖的示例
代码验证清单
检查项验证方法
console.log 输出与注释一致运行代码或在脑中跟踪执行过程
变量命名和使用正确阅读并检查逻辑
函数返回预期值跟踪执行过程
异步代码按所述顺序完成理解事件循环
错误示例确实会抛出错误在 try/catch 中测试
数组/对象方法返回正确的类型查阅 MDN
typeof 的结果准确测试常见情况
相关时是否说明严格模式行为检查示例是否依赖严格模式
需要留意的常见输出错误
// Watch for these common mistakes:

// 1. typeof null
typeof null        // "object" (not "null"!)

// 2. Array methods that return new arrays vs mutate
const arr = [1, 2, 3]
arr.push(4)        // Returns 4 (length), not the array!
arr.map(x => x*2)  // Returns NEW array, doesn't mutate

// 3. Promise resolution order
Promise.resolve().then(() => console.log('micro'))
setTimeout(() => console.log('macro'), 0)
console.log('sync')
// Output: sync, micro, macro (NOT sync, macro, micro)

// 4. Comparison results
[] == false        // true
[] === false       // false
![]                // false (empty array is truthy!)

// 5. this binding
const obj = {
  name: 'Alice',
  greet: () => console.log(this.name)  // undefined! Arrow has no this
}

阶段 2:核对 MDN 文档

所有关于 JavaScript API、方法和行为的说法都应与 MDN 文档一致。

分步流程
  1. 检查所有 MDN 链接:

    • 点击文档中的每个 MDN 链接
    • 验证链接返回状态码 200(而非 404)
    • 确认链接页面与所引用的内容相符
  2. 核实 API 描述:

    • 将方法签名与 MDN 进行对照
    • 检查参数名称和类型
    • 验证返回类型
    • 确认边缘情况的行为
  3. 检查已弃用的 API:

    • 查看 MDN 上的弃用警告
    • 标记任何被当作当前做法讲解的已弃用方法
  4. 核实浏览器兼容性说明:

    • 与 MDN 兼容性表交叉核对
    • 查阅 Can I Use,获取更全面的支持数据
MDN 链接模式
内容类型MDN URL 模式
Web APIhttps://developer.mozilla.org/en-US/docs/Web/API/{APIName}
全局对象https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/{Object}
语句https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/{Statement}
运算符https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/{Operator}
HTTPhttps://developer.mozilla.org/en-US/docs/Web/HTTP
需要对照 MDN 核实的内容
声明类型核查内容
方法签名参数、可选参数、返回类型
返回值确切类型和可能的取值
副作用是否会修改数据?会影响什么?
异常可能抛出哪些错误?
浏览器支持兼容性表格
弃用状态是否有任何弃用警告?

第 3 阶段:符合 ECMAScript 规范

对于细微的 JavaScript 行为,请对照 ECMAScript 规范核实。

何时查阅规范
  • 边缘情况和异常行为
  • 关于“JavaScript 内部工作原理”的声明
  • 类型强制转换规则
  • 运算符优先级
  • 执行顺序保证
  • 使用“始终”“从不”“保证”等词语的声明
如何查阅规范

ECMAScript 规范位于:https://tc39.es/ecma262/

概念规范章节
类型强制转换抽象操作(7.1)
相等性抽象相等比较(7.2.14)、严格相等(7.2.15)
typeoftypeof 运算符(13.5.3)
对象普通对象和异质对象的行为(10)
函数ECMAScript 函数对象(10.2)
this 绑定ResolveThisBinding(9.4.4)
PromisePromise 对象(27.2)
迭代迭代(27.1)
规范核实示例
// Claim: "typeof null returns 'object' due to a bug"
// Spec says: typeof null → "object" (Table 41)
// Historical context: This is a known quirk from JS 1.0
// Verdict: ✓ Correct, though calling it a "bug" is slightly informal

// Claim: "Promises always resolve asynchronously"
// Spec says: Promise reaction jobs are enqueued (27.2.1.3.2)
// Verdict: ✓ Correct - even resolved promises schedule microtasks

// Claim: "=== is faster than =="
// Spec says: Nothing about performance
// Verdict: ⚠️ Needs nuance - this is implementation-dependent

第 4 阶段:外部资源核实

必须核实所有外部链接(文章、视频、课程)。

分步流程
  1. 检查链接是否可访问:

    • 点击每个外部链接
    • 确认页面能正常加载(不是 404,也未设置付费墙)
    • 留意是否重定向到其他 URL
  2. 核实内容准确性:

    • 浏览资源,查找明显错误
    • 确认内容聚焦于 JavaScript(而非 C#、Python、Java)
    • 确认没有教授反模式
  3. 检查发布日期:

    • 对于时效性较强的主题(异步、模块等),优先选择近期内容
    • 如果涉及 ES6 及更高版本的主题,将 2015 年以前的资源标记出来
  4. 核实描述是否准确:

    • 我们的描述是否符合资源实际涵盖的内容?
    • 描述是否具体(而非泛泛而谈)?
外部资源核对清单
核查项通过标准
链接有效返回 200,内容能正常加载
无付费墙可免费访问(或已明确标注)
聚焦 JavaScript主要内容并非关于其他语言
内容未过时现代 JavaScript 主题的资源发布于 2015 年之后
描述准确我们的描述与实际内容相符
无反模式不会教授不良实践
来源可靠来自知名或可信的创作者
外部资源中的警示信号
  • 涉及 ES6 及更高版本主题时,到处使用 var
  • 在讲解 Promise/异步的内容中使用回调
  • 将 jQuery 作为现代 DOM 操作方式来教授
  • 包含关于 JavaScript 的事实性错误
  • 视频时长超过 2 小时,且没有时间戳链接
  • 内容主要讲解其他语言
  • 使用已弃用的 API,却未注明其弃用状态

第 5 阶段:技术声明审查

审查所有关于 JavaScript 行为的说明性声明。

需要核实的声明
声明类型核实方法
性能声明需要基准测试或注意事项
浏览器行为指明浏览器并查阅 MDN
历史声明核实日期/版本
使用“始终”或“从不”的表述检查是否存在例外
比较(X 与 Y)准确核实双方
技术声明中的警示信号
  • 使用“始终”或“从不”,但未说明例外
  • 没有基准测试支持的性能声明
  • 未指明浏览器的浏览器行为声明
  • 过度简化差异的比较
  • 未注明日期的历史声明
  • 关于“JavaScript 工作原理”的声明没有规范依据
需要核实的声明示例
❌ "async/await is always better than Promises"
→ Verify: Not always - Promise.all() is better for parallel operations

❌ "JavaScript is an interpreted language"
→ Verify: Modern JS engines use JIT compilation

❌ "Objects are passed by reference"
→ Verify: Technically "passed by sharing" - the reference is passed by value

❌ "=== is faster than =="
→ Verify: Implementation-dependent, not guaranteed by spec

✓ "JavaScript is single-threaded"
→ Verify: Correct for the main thread (Web Workers are separate)

✓ "Promises always resolve asynchronously"
→ Verify: Correct per ECMAScript spec

常见 JavaScript 误解

留意是否有人将以下误解当作事实陈述。

类型系统误解
误解事实如何验证
typeof null === "object" 是有意为之这是 JS 1.0 中的一个错误,出于兼容性考虑无法修复历史背景、TC39 讨论
JavaScript 没有类型JS 是动态类型语言,而不是无类型语言ECMAScript 规范定义了类型
== 总是错误的== null 会同时检查 null 和 undefined,也有合理用途许多风格指南允许这种写法
NaN === NaN 为 false 是“失误”这是 IEEE 754 浮点数规范中的有意设计IEEE 754 标准
函数误解
误解事实如何验证
箭头函数只是更简短的语法它们没有 this、arguments、super 或 new.targetMDN、ECMAScript 规范
var 会连同其值一起提升到函数作用域只有声明会提升,初始化不会代码测试、MDN
闭包是一种需要特别启用的功能JS 中的所有函数都是闭包ECMAScript 规范
IIFE 已经过时对于一次性初始化,它们仍然有用现代代码库仍在使用
异步误解
误解事实如何验证
Promise 会并行运行JS 是单线程的;Promise 是异步的,而非并行的事件循环说明
async/await 与 Promise 不同它是 Promise 的语法糖MDN,可对任何 thenable 使用 await
setTimeout(fn, 0) 会立即运行它会在当前执行和微任务完成后运行事件循环、代码测试
await 会暂停整个程序它只会暂停异步函数,不会暂停事件循环代码测试
对象误解
误解事实如何验证
对象是“按引用传递”的传递的是引用的值(“按共享传递”)重新赋值测试
const 会使对象不可变const 会阻止重新赋值,但不会阻止修改代码测试
JavaScript 中的一切都是对象原始值不是对象(尽管它们有包装对象)typeof 测试、MDN
Object.freeze() 会创建深层不可变对象它只会浅层冻结,嵌套对象仍可修改代码测试
性能误解
误解事实如何验证
=== 总是比 == 快取决于实现,规范并未保证基准测试结果各不相同
for 循环比 forEach 快现代引擎会优化两者;具体取决于使用场景基准测试
箭头函数更快性能没有差异,只有行为不同基准测试
避免 DOM 操作总是更快有时,批量修改反而比逐项修改更慢取决于浏览器和使用场景

测试集成

运行项目的测试套件是事实核查的重要环节。

测试命令
# Run all tests
npm test

# Run tests in watch mode
npm run test:watch

# Run tests with coverage
npm run test:coverage

# Run tests for specific concept
npm test -- tests/fundamentals/call-stack/
npm test -- tests/fundamentals/primitive-types/
npm test -- tests/fundamentals/value-reference-types/
npm test -- tests/fundamentals/type-coercion/
npm test -- tests/fundamentals/equality-operators/
npm test -- tests/fundamentals/scope-and-closures/
测试目录结构
tests/
├── fundamentals/              # Concepts 1-6
│   ├── call-stack/
│   ├── primitive-types/
│   ├── value-reference-types/
│   ├── type-coercion/
│   ├── equality-operators/
│   └── scope-and-closures/
├── functions-execution/       # Concepts 7-8
│   ├── event-loop/
│   └── iife-modules/
└── web-platform/              # Concepts 9-10
    ├── dom/
    └── http-fetch/
缺少测试时

如果某个概念没有测试:

  1. 在报告中标记为“需要测试覆盖”
  2. 手动验证代码示例是否正确
  3. 考虑将添加测试作为后续任务

验证资源

一手资料
资源URL用途
MDN Web Docshttps://developer.mozilla.orgAPI 文档、指南、兼容性
ECMAScript 规范https://tc39.es/ecma262权威行为说明
TC39 提案https://github.com/tc39/proposals新功能、阶段
Can I Usehttps://caniuse.com浏览器兼容性
Node.js 文档https://nodejs.org/docsNode 专属 API
V8 博客https://v8.dev/blog引擎内部机制
项目资源
资源路径用途
测试套件/tests/验证代码示例
概念页面/docs/concepts/当前内容
运行测试npm test执行所有测试

事实核查报告模板

使用此模板记录你的调查结果。

# Fact Check Report: [Concept Name]

**File:** `/docs/concepts/[slug].mdx`
**Date:** YYYY-MM-DD
**Reviewer:** [Name/Claude]
**Overall Status:** ✅ Verified | ⚠️ Minor Issues | ❌ Major Issues

---

## Executive Summary

[2-3 sentence summary of findings. State whether the page is accurate overall and highlight any critical issues.]

**Tests Run:** Yes/No
**Test Results:** X passing, Y failing
**External Links Checked:** X/Y valid

---

## Phase 1: Code Example Verification

| # | Description | Line | Status | Notes |
|---|-------------|------|--------|-------|
| 1 | [Brief description] | XX | ✅/⚠️/❌ | [Notes] |
| 2 | [Brief description] | XX | ✅/⚠️/❌ | [Notes] |
| 3 | [Brief description] | XX | ✅/⚠️/❌ | [Notes] |

### Code Issues Found

#### Issue 1: [Title]

**Location:** Line XX
**Severity:** Critical/Major/Minor
**Current Code:**
```javascript
// The problematic code

问题:[错误说明] 正确代码:

// The corrected code

阶段 2:MDN/规范核实

声明位置来源状态备注
[所作声明]第 XX 行MDN/规范✅/⚠️/❌[备注]
MDN 链接状态
链接文本URL状态
[文本][URL]✅ 200 / ❌ 404
规范差异

[如果有任何声明与 ECMAScript 规范不符,请在此详细说明]


阶段 3:外部资源核实

资源类型链接内容备注
[标题]文章/视频✅/❌✅/⚠️/❌[备注]
失效链接
  1. 第 XX 行:[URL] - 未找到 404
  2. 第 YY 行:[URL] - 域名已过期
内容问题
  1. [资源名称]:[问题,例如:内容过时、语言不正确、反模式]
描述准确性
资源描述是否准确?备注
[标题]✅/❌[备注]

阶段 4:技术声明审查

声明位置结论备注
“[声明]”第 XX 行✅/⚠️/❌[备注]
需要修订的声明
  1. 第 XX 行:“[当前声明]”
    • 问题:[问题所在]
    • 建议:“[修订后的声明]”

阶段 5:测试结果

测试文件:/tests/[category]/[concept]/[concept].test.js **运行测试数:**XX **通过:**XX **失败:**XX

失败的测试
测试名称预期结果实际结果相关文档行
[测试][预期结果][实际结果]第 XX 行
覆盖缺口

文档中的示例未对应相应测试:

  • 第 XX 行:[未测试示例的说明]
  • 第 YY 行:[未测试示例的说明]

问题摘要

严重(发布前必须修复)
  1. [问题标题]
    • 位置:第 XX 行
    • 问题:[说明]
    • 修复方法:[如何修复]
主要(应该修复)
  1. [问题标题]
    • 位置:第 XX 行
    • 问题:[说明]
    • 修复方法:[如何修复]
次要(可改进)
  1. [问题标题]
    • 位置:第 XX 行
    • 建议:[改进建议]

建议

  1. [优先级 1]:[具体、可执行的建议]
  2. [优先级 2]:[具体、可执行的建议]
  3. [优先级 3]:[具体、可执行的建议]

核实清单

  • 已核实所有代码示例的输出是否正确
  • 已检查所有 MDN 链接且链接有效
  • API 描述与 MDN 文档一致
  • 已核实是否符合 ECMAScript 规范(如适用)
  • 所有外部资源链接均可访问
  • 资源描述准确反映其内容
  • 未发现常见的 JavaScript 误解
  • 技术声明准确且表述严谨
  • 已运行并审查项目测试
  • 报告完整,可交接

签字确认

核实人:[姓名/Claude] **日期:**YYYY-MM-DD 建议:✅ 可以发布 | ⚠️ 先修复问题 | ❌ 需要大幅修订


---

## Quick Reference: Verification Commands

```bash
# Run all tests
npm test

# Run specific concept tests
npm test -- tests/fundamentals/call-stack/

# Check for broken links (if you have a link checker)
# Install: npm install -g broken-link-checker
# Run: blc https://developer.mozilla.org/... -ro

# Quick JavaScript REPL for testing
node
> typeof null
'object'
> [1,2,3].map(x => x * 2)
[ 2, 4, 6 ]

总结

对概念页面进行事实核查时:

  1. 先运行测试 — npm test 可自动发现代码错误
  2. 核实每个代码示例 — 输出注释必须与实际情况一致
  3. 检查所有 MDN 链接 — 失效链接和不准确的描述会损害可信度
  4. 核实外部资源 — 资源必须可访问、准确,并且聚焦于 JavaScript
  5. 审查技术声明 — 留意误解和缺乏依据的说法
  6. 记录所有内容 — 使用报告模板进行一致、全面的审查

**请记住:**读者相信我们会教给他们正确的 JavaScript 知识。哪怕一条错误信息,也可能造成困扰,而且需要多年才能纠正。请认真对待事实核查。

评论

支持 Markdown