本周要回答: 当用户输入不完整、顺序不同或数据重复时,工具还能给出可解释的结果吗?
进入本周前: 能运行第 1 周工具,认识函数、参数、数组和对象;不熟悉时继续补基础,不急着加界面。
- 01解析输入
- 02校验字段
- 03纯函数处理
- 04预览输出
学习内容与理解目标
学习主线是纯处理逻辑与副作用分开:解析输入、计算结果、读写文件或更新页面,不要混成一个巨大函数。理解字符串、数字、布尔值、数组、对象以及 Map/Set 的用途;能解释为什么“空字符串”和“没有值”不能一律当零。掌握条件分支、循环、异常和模块的最小用法。
类型声明有助于开发期间检查,但来自文件、网络和模型的内容仍需要运行时校验。本周先自己理解一条校验规则,再决定是否引入库;不要为了三个字段搭建复杂验证框架。通过错误样例学习规则的边界,比重复生成正确样例更有价值。
学习链接与选读范围
| 级别 | 官方或原始资料 | 本周只读这些 | 阅读预算 |
|---|---|---|---|
| 必读 | R27 · MDN:JavaScript Guide | Control flow and error handling、Indexed collections、Keyed collections、Functions。 | 60 分钟 |
| 必读 | R28 · TypeScript Handbook:Introduction | Everyday Types、Narrowing;重点区分类型提示和实际输入检查。 | 35 分钟 |
| 补基础 | R13 · CS50P Week 5:Unit Tests | 如何为函数提供独立输入与期望结果。 | 25 分钟 |
实战拆解
将第 1 周功能拆成三个小部分:读取或接收输入、纯函数处理、展示或保存输出。先保证行为不变,再重构;不要在同一次修改里同时加新功能。
为数据写清字段、单位和允许范围。例如时长用整数分钟、空标题是否允许、重复项按什么字段判断。对不确定的字段写“缺失”,不要静默生成一个看似合理的值。
准备正常、空列表、字段缺失、错误类型、重复项五组样例。先预测每组是成功还是拒绝,再运行;错误信息要能让使用者知道怎么改。
用当前工具链的一种测试方式固定上述行为。让 agent 帮忙写重复代码,但自己审查期望值;不要把实现的错误复制进测试答案。
加入只预览不写入的模式,或者保持输出到新文件。解释一次输入如何经过每个函数,并把最复杂函数拆小到自己能逐行读懂。
交付与验收
| 本周交付 | 怎样确认真的完成 |
|---|---|
| 数据约定 | 字段、类型、单位、缺失值和去重规则都有明确说明。 |
| 边界测试 | 正常与异常样例能被重复运行,期望结果经过本人核验。 |
| 可理解的错误 | 坏输入被拒绝或清楚标记,不悄悄改成另一条有效数据。 |
不用代码生成器的练习: 自己新增一条规则:例如时长必须大于零、标题去掉首尾空格。先写失败样例,再修改实现;不能让模型先把完整补丁给你。
隐私与安全检查: 输出默认最小化,不保留输入原文的“调试备份”。处理文本时不要直接把用户输入拼成可执行命令或数据库语句;尚未需要执行外部动作就不要增加该能力。
落到日常生活: 找一次过去容易因复制粘贴或缺字段而返工的任务,使用校验后的工具。记录错误是否被更早发现;防止返工也是价值,不必只统计点击数。
过关或补课判断: 可以解释一次校验失败,并独立添加一条规则后再进入下一周。若测试只有“没有抛异常”,应补一个结果确实正确的断言。
本周可复制的协作提示
请先帮我明确数据契约,将解析、纯逻辑和输出分离。围绕真实边界写最小测试,不扩展框架。完成后让我自己增加一条校验规则,并检查我是否真正理解类型检查与运行时校验的区别。
本周来源与核对范围
来源编号与核对说明沿用课程原文,基线为 2026-09-27。未逐一登录完成外部实验;实施前请核对最新版本与访问条件。
- R13CS50P Week 5:Unit Tests ↗
选输入、期望输出与测试边界,不必迁移整个项目到 Python。
- R27MDN:JavaScript Guide ↗
按章读语法、控制流、集合、函数、异步与模块。
- R28TypeScript Handbook:Introduction ↗
主手册入口;先有 JavaScript 基础,再读日常类型与收窄。