chore: import zh skill fact-check

This commit is contained in:
wehub-skill-sync
2026-07-13 21:36:30 +08:00
commit c30f4c152e
2 changed files with 658 additions and 0 deletions
+9
View File
@@ -0,0 +1,9 @@
# WeHub 来源说明
- Skill 名称:`fact-check`
- 中文类目:技术学习资源策展与校验
- 上游仓库:`leonardomso__33-js-concepts`
- 上游路径:`.claude/skills/fact-check/SKILL.md`
- 上游链接:https://github.com/leonardomso/33-js-concepts/blob/HEAD/.claude/skills/fact-check/SKILL.md
- 本仓库为 WeHub 中文 Skill 汉化包,基于 skill 市场筛选 Top200 清单整理
- 原作者、版权和许可证信息以上游仓库为准
+649
View File
@@ -0,0 +1,649 @@
---
name: fact-check
description: 验证 JavaScript 概念页面的技术准确性,通过检查代码示例、MDN/ECMAScript 合规性以及外部资源来防止错误信息传播
---
# 技能:JavaScript 事实核查器
使用此技能来验证 33 个 JavaScript 概念项目中的概念文档页面的技术准确性。这确保我们不会传播关于 JavaScript 的错误信息。
## 何时使用
- 发布新的概念页面之前
- 对现有内容进行重大编辑之后
- 审核社区贡献时
- 使用新 JavaScript 特性更新页面时
- 对现有内容进行定期准确性审计
## 我们要防范什么
- 错误的 JavaScript 行为声明
- 过时的信息(将 ES6 之前的模式当作当前标准呈现)
- 无法产生所述输出的代码示例
- 已损坏或具有误导性的外部资源链接
- 被当作事实陈述的常见误解
- 将特定于浏览器的行为描述为通用行为
- 不准确的 API 描述
---
## 事实核查方法
按顺序执行以下五个阶段以完成完整的事实核查。
### 阶段 1:代码示例验证
概念页面中的每个代码示例都必须验证其准确性。
#### 分步流程
1. **识别文档中的所有代码块**
2. **针对每个代码块:**
- 阅读代码及任何输出注释(例如 `// "string"`
- 在脑中执行代码或在 JavaScript 环境中测试
- 验证输出是否与注释中所述一致
- 检查变量名和逻辑是否正确
3. **针对"错误"示例(标记为 ❌):**
- 验证它们确实产生了错误/意外的行为
- 确认关于错误原因的解释是准确的
4. **针对"正确"示例(标记为 ✓):**
- 验证它们按所述方式工作
- 确认它们遵循当前最佳实践
5. **运行项目测试:**
```bash
# 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` 结果准确 | 测试常见情况 |
| 必要时注明严格模式行为 | 检查示例是否依赖严格模式 |
#### 需要留意的常见输出错误
```javascript
// 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
}
```
---
### 阶段 2MDN 文档验证
所有关于 JavaScript API、方法和行为的声明应与 MDN 文档保持一致。
#### 分步流程
1. **检查所有 MDN 链接:**
- 点击文档中的每个 MDN 链接
- 验证链接返回 200(非 404)
- 确认链接页面与所引用内容匹配
2. **验证 API 描述:**
- 将方法签名与 MDN 进行对比
- 检查参数名称和类型
- 验证返回类型
- 确认边界情况行为
3. **检查已弃用的 API**
- 在 MDN 上查找弃用警告
- 标记任何被当作现行标准教授的已弃用方法
4. **验证浏览器兼容性声明:**
- 与 MDN 兼容性表交叉对照
- 查阅 Can I Use 获取更广泛的兼容性数据
#### MDN 链接模式
| 内容类型 | MDN URL 模式 |
|--------------|-----------------|
| Web APIs | `https://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}` |
| HTTP | `https://developer.mozilla.org/en-US/docs/Web/HTTP` |
#### 需对照 MDN 验证的内容
| 声明类型 | 检查内容 |
|------------|---------------|
| 方法签名 | 参数、可选参数、返回类型 |
| 返回值 | 确切类型和可能的值 |
| 副作用 | 是否发生修改?影响什么? |
| 异常 | 可能抛出什么错误? |
| 浏览器支持 | 兼容性表 |
| 弃用状态 | 是否有弃用警告? |
---
### 阶段 3ECMAScript 规范合规性
对于微妙的 JavaScript 行为,需对照 ECMAScript 规范进行验证。
#### 何时检查规范
- 边界情况和异常行为
- 关于"JavaScript 内部工作原理"的声明
- 类型强制转换规则
- 运算符优先级
- 执行顺序保证
- 使用"总是"、"从不"、"保证"等词语的声明
#### 如何浏览规范
ECMAScript 规范位于:https://tc39.es/ecma262/
| 概念 | 规范章节 |
|---------|--------------|
| 类型强制转换 | Abstract Operations (7.1) |
| 相等性 | Abstract Equality Comparison (7.2.14), Strict Equality (7.2.15) |
| typeof | The typeof Operator (13.5.3) |
| 对象 | Ordinary and Exotic Objects' Behaviours (10) |
| 函数 | ECMAScript Function Objects (10.2) |
| this 绑定 | ResolveThisBinding (9.4.4) |
| Promise | Promise Objects (27.2) |
| 迭代 | Iteration (27.1) |
#### 规范验证示例
```javascript
// 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 | 并非主要关于其他语言 |
| 不过时 | ES6+ 主题为 2015 年之后 |
| 描述准确 | 我们的描述与实际内容相符 |
| 无反模式 | 不教授不良实践 |
| 来源可靠 | 来自知名/可信的创作者 |
#### 外部资源的警示信号
- 在 ES6+ 主题中到处使用 `var`
- 在涉及 Promise/async 的内容中使用回调
- 将 jQuery 作为现代 DOM 操作方式教授
- 包含关于 JavaScript 的事实性错误
- 视频超过 2 小时且无时间戳链接
- 内容主要关于其他语言
- 使用已弃用的 API 但未注明弃用
---
### 阶段 5:技术声明审计
审查所有关于 JavaScript 行为的散文式声明。
#### 需要验证的声明类型
| 声明类型 | 如何验证 |
|------------|---------------|
| 性能声明 | 需要基准测试或附加说明 |
| 浏览器行为 | 指定浏览器,查阅 MDN |
| 历史声明 | 验证日期/版本 |
| "总是"或"从不"的表述 | 检查是否存在例外 |
| 对比(X 与 Y) | 准确验证双方 |
#### 技术声明中的警示信号
- "总是"或"从不"未注明例外情况
- 无基准测试支撑的性能声明
- 未指定浏览器的浏览器行为声明
- 过度简化差异的对比
- 无日期的历史声明
- 关于"JavaScript 工作原理"的声明但未引用规范
#### 需要验证的声明示例
```markdown
❌ "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 中因兼容性而无法修复的 bug | 历史背景、TC39 讨论 |
| JavaScript 没有类型 | JS 是动态类型语言,并非无类型 | ECMAScript 规范定义了类型 |
| `==` 总是错的 | `== null` 可同时检查 null 和 undefined,有合理用途 | 许多风格指南允许此模式 |
| `NaN === NaN` 为 false 是"搞错了" | 根据 IEEE 754 浮点规范,这是故意的 | IEEE 754 标准 |
### 函数误解
| 误解 | 真相 | 如何验证 |
|---------------|---------|---------------|
| 箭头函数只是更短的语法 | 它们没有 `this`、`arguments`、`super` 或 `new.target` | MDN、ECMAScript 规范 |
| `var` 会被提升到函数作用域并带上其值 | 只有声明被提升,初始化不会 | 代码测试、MDN |
| 闭包是一种特殊的可选功能 | JS 中所有函数都是闭包 | ECMAScript 规范 |
| IIFE 已过时 | 对于一次性初始化仍有用途 | 现代代码库仍在使用它们 |
### 异步误解
| 误解 | 真相 | 如何验证 |
|---------------|---------|---------------|
| Promise 是并行执行的 | JS 是单线程的;Promise 是异步的,不是并行的 | 事件循环解释 |
| `async/await` 与 Promise 不同 | 它是对 Promise 的语法糖 | MDN,可 await 任何 thenable |
| `setTimeout(fn, 0)` 会立即执行 | 在当前执行 + 微任务之后执行 | 事件循环、代码测试 |
| `await` 会暂停整个程序 | 只暂停 async 函数,不会暂停事件循环 | 代码测试 |
### 对象误解
| 误解 | 真相 | 如何验证 |
|---------------|---------|---------------|
| 对象是"按引用传递"的 | 引用是按值传递的("按共享传递") | 重新赋值测试 |
| `const` 使对象不可变 | `const` 阻止重新赋值,而非阻止修改 | 代码测试 |
| JavaScript 中一切都是对象 | 基本类型不是对象(尽管它们有包装器) | `typeof` 测试、MDN |
| `Object.freeze()` 创建深度不可变性 | 它是浅层的——嵌套对象仍可被修改 | 代码测试 |
### 性能误解
| 误解 | 真相 | 如何验证 |
|---------------|---------|---------------|
| `===` 总是比 `==` 快 | 取决于实现,规范不做保证 | 基准测试结果各异 |
| `for` 循环比 `forEach` 快 | 现代引擎对两者都优化;取决于使用场景 | 基准测试 |
| 箭头函数更快 | 无性能差异,只是行为不同 | 基准测试 |
| 避免 DOM 操作总是更快 | 有时批量修改比单独修改更慢 | 取决于浏览器和使用场景 |
---
## 测试集成
运行项目的测试套件是事实核查的关键部分。
### 测试命令
```bash
# 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 Docs | https://developer.mozilla.org | API 文档、指南、兼容性 |
| ECMAScript 规范 | https://tc39.es/ecma262 | 权威行为定义 |
| TC39 提案 | https://github.com/tc39/proposals | 新特性、各阶段 |
| Can I Use | https://caniuse.com | 浏览器兼容性 |
| Node.js 文档 | https://nodejs.org/docs | Node 特定 API |
| V8 博客 | https://v8.dev/blog | 引擎内部机制 |
### 项目资源
| 资源 | 路径 | 用途 |
|----------|------|---------|
| 测试套件 | `/tests/` | 验证代码示例 |
| 概念页面 | `/docs/concepts/` | 当前内容 |
| 运行测试 | `npm test` | 执行所有测试 |
---
## 事实核查报告模板
使用此模板记录你的发现。
```markdown
# 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
```
**Problem:** [Explanation of what's wrong]
**Correct Code:**
```javascript
// The corrected code
```
---
## Phase 2: MDN/Specification Verification
| Claim | Location | Source | Status | Notes |
|-------|----------|--------|--------|-------|
| [Claim made] | Line XX | MDN/Spec | ✅/⚠️/❌ | [Notes] |
### MDN Link Status
| Link Text | URL | Status |
|-----------|-----|--------|
| [Text] | [URL] | ✅ 200 / ❌ 404 |
### Specification Discrepancies
[If any claims don't match the ECMAScript spec, detail them here]
---
## Phase 3: External Resource Verification
| Resource | Type | Link | Content | Notes |
|----------|------|------|---------|-------|
| [Title] | Article/Video | ✅/❌ | ✅/⚠️/❌ | [Notes] |
### Broken Links
1. **Line XX:** [URL] - 404 Not Found
2. **Line YY:** [URL] - Domain expired
### Content Concerns
1. **[Resource name]:** [Concern - e.g., outdated, wrong language, anti-patterns]
### Description Accuracy
| Resource | Description Accurate? | Notes |
|----------|----------------------|-------|
| [Title] | ✅/❌ | [Notes] |
---
## Phase 4: Technical Claims Audit
| Claim | Location | Verdict | Notes |
|-------|----------|---------|-------|
| "[Claim]" | Line XX | ✅/⚠️/❌ | [Notes] |
### Claims Needing Revision
1. **Line XX:** "[Current claim]"
- **Issue:** [What's wrong]
- **Suggested:** "[Revised claim]"
---
## Phase 5: Test Results
**Test File:** `/tests/[category]/[concept]/[concept].test.js`
**Tests Run:** XX
**Passing:** XX
**Failing:** XX
### Failing Tests
| Test Name | Expected | Actual | Related Doc Line |
|-----------|----------|--------|------------------|
| [Test] | [Expected] | [Actual] | Line XX |
### Coverage Gaps
Examples in documentation without corresponding tests:
- [ ] Line XX: [Description of untested example]
- [ ] Line YY: [Description of untested example]
---
## Issues Summary
### Critical (Must Fix Before Publishing)
1. **[Issue title]**
- Location: Line XX
- Problem: [Description]
- Fix: [How to fix]
### Major (Should Fix)
1. **[Issue title]**
- Location: Line XX
- Problem: [Description]
- Fix: [How to fix]
### Minor (Nice to Have)
1. **[Issue title]**
- Location: Line XX
- Suggestion: [Improvement]
---
## Recommendations
1. **[Priority 1]:** [Specific actionable recommendation]
2. **[Priority 2]:** [Specific actionable recommendation]
3. **[Priority 3]:** [Specific actionable recommendation]
---
## Verification Checklist
- [ ] All code examples verified for correct output
- [ ] All MDN links checked and valid
- [ ] API descriptions match MDN documentation
- [ ] ECMAScript compliance verified (if applicable)
- [ ] All external resource links accessible
- [ ] Resource descriptions accurately represent content
- [ ] No common JavaScript misconceptions found
- [ ] Technical claims are accurate and nuanced
- [ ] Project tests run and reviewed
- [ ] Report complete and ready for handoff
---
## Sign-off
**Verified by:** [Name/Claude]
**Date:** YYYY-MM-DD
**Recommendation:** ✅ Ready to publish | ⚠️ Fix issues first | ❌ Major revision needed
```
---
## 快速参考:验证命令
```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。一条错误信息就可能造成需要数年才能纠正的困惑。请认真对待事实核查。