Skip to content

Repository files navigation

JavaScript Development Lab

通过 20 个独立、最小、可运行的 JavaScript 实验,系统理解现代 JavaScript 的核心知识,并逐步建立从“语法”到“数据处理”、从“DOM 交互”到“异步请求”、再到“小型应用架构”的完整学习路径。

本项目不以“做 20 个炫酷特效”为目标,而是希望通过一组可以反复运行、修改和观察的最小实验,真正理解 JavaScript 在网页开发中的作用。


项目目标

很多 JavaScript 学习过程容易陷入两个极端:

只学语法
↓
知道变量、数组、函数
↓
但不知道如何写真实页面

或者:

只做效果
↓
复制 Tabs / Modal / Slider
↓
但不理解背后的数据和程序逻辑

本项目采用另一种方式:

一个 Lab
↓
一个核心问题
↓
一个最小可运行示例
↓
修改代码
↓
观察结果
↓
理解原理
↓
逐步组合

最终希望建立这样的知识链路:

JavaScript 基础
↓
数据结构与数据处理
↓
DOM 与事件
↓
表单与 CRUD
↓
浏览器本地存储
↓
JSON
↓
Promise
↓
Fetch / Async Await
↓
ES Modules
↓
Mini App

20 个实验知识地图

整个项目分为 5 个阶段,每个阶段解决一个更高层次的问题。


Part 1:JavaScript 基础

目标:

理解 JavaScript 如何保存数据、判断条件、重复执行代码和封装逻辑。

# 实验 核心知识
01 Variables letconst、数据类型、typeof
02 Condition ifelseswitch、逻辑运算
03 Loop forwhilefor...of
04 Function 函数、参数、return、作用域、箭头函数

这一阶段主要解决:

数据是什么?
↓
程序如何判断?
↓
程序如何重复执行?
↓
如何把逻辑封装成函数?

Part 2:数据结构与数据处理

目标:

理解现代 JavaScript 中最常见的 Array + Object 数据结构,以及如何对数据进行筛选、查找、转换和组合。

# 实验 核心知识
05 Array 数组、索引、lengthpush()pop()
06 Array Methods map()filter()find()reduce()sort()
07 Object 对象、属性、嵌套对象、对象方法
08 Destructuring & Spread 解构赋值、Spread、Rest

真实 Web 项目中非常常见的数据形态是:

Array
└── Object
    ├── id
    ├── name
    ├── category
    ├── price
    └── ...

例如:

  • 产品列表
  • 文章列表
  • 用户数据
  • API 返回结果
  • WooCommerce 产品数据
  • JSON 数据

都经常使用这种结构。


Part 3:DOM 与浏览器交互

目标:

理解 JavaScript 如何真正控制网页,并响应用户操作。

# 实验 核心知识
09 DOM querySelector()textContentinnerHTML、创建和删除元素
10 Class & Dataset classListdata-*dataset
11 Events clickinputchangesubmitkeydown
12 Event Delegation 事件冒泡、event.targetclosest()、事件委托

这一阶段建立最重要的浏览器交互模型:

用户操作
↓
Event
↓
JavaScript
↓
DOM
↓
Class / Content
↓
页面发生变化

例如:

Tabs
Accordion
Modal
Menu
Drawer
Product Filter
Gallery

很多常见网页交互,本质上都可以追溯到这一套机制。


Part 4:Web App 基础

目标:

从简单交互进入数据管理,理解表单、CRUD、浏览器存储和 JSON。

# 实验 核心知识
13 CRUD Create / Read / Update / Delete
14 Form 表单读取、FormData、验证、preventDefault()
15 LocalStorage 浏览器本地存储、数据持久化
16 JSON JSON.stringify()JSON.parse()、导入导出

这一阶段开始形成小型应用最基础的数据流:

用户输入
↓
JavaScript Object
↓
Array
↓
CRUD
↓
DOM

再进一步:

JavaScript 数据
↓
JSON
↓
LocalStorage / 文件 / API

Part 5:现代 JavaScript

目标:

理解异步编程、外部数据请求和现代 JavaScript 项目的模块化组织方式。

# 实验 核心知识
17 Promise Promise、resolve()reject()then()catch()
18 Fetch & Async/Await Fetch、asyncawaittry...catch
19 ES Modules importexport、模块职责分离
20 Mini App 综合 Product Explorer

这一阶段完成下面这条重要链路:

JSON
↓
Promise
↓
Fetch
↓
Async / Await
↓
ES Modules
↓
Mini App

最终综合实验:Product Explorer

20-mini-app 是整个第一阶段的综合实验。

它并不是一个追求功能数量的大项目,而是用于验证前面知识能否真正组合起来。

核心功能包括:

  • 外部 JSON 产品数据
  • Fetch 数据加载
  • 搜索
  • 分类筛选
  • 排序
  • 产品详情
  • 收藏
  • 只看收藏
  • LocalStorage
  • ES Modules
  • Loading / Error 状态

项目结构:

20-mini-app/
├── index.html
├── css/
│   └── style.css
├── data/
│   └── products.json
├── js/
│   ├── app.js
│   ├── api.js
│   ├── storage.js
│   ├── ui.js
│   └── utils.js
└── README.md

可以把它理解成一个最小的现代 JavaScript 应用:

数据
↓
请求 / 存储
↓
业务逻辑
↓
DOM
↓
用户交互

仓库目录

javascript-development-lab/
│
├── README.md
│
├── 01-variables/
├── 02-condition/
├── 03-loop/
├── 04-function/
│
├── 05-array/
├── 06-array-methods/
├── 07-object/
├── 08-destructuring-spread/
│
├── 09-dom/
├── 10-class-dataset/
├── 11-events/
├── 12-event-delegation/
│
├── 13-crud/
├── 14-form/
├── 15-localstorage/
├── 16-json/
│
├── 17-promise/
├── 18-fetch-async-await/
├── 19-es-modules/
└── 20-mini-app/

每个实验都是一个独立目录,并包含自己的 README.md

典型结构:

xx-example/
├── index.html
├── css/
│   └── style.css
├── js/
│   └── app.js
└── README.md

部分章节会根据实际需要增加:

data/

或者拆分多个 JavaScript 模块。


如何运行

01 ~ 17

大部分实验可以直接打开:

index.html

即可运行。


18 ~ 20

以下章节涉及:

  • Fetch
  • JSON 文件请求
  • ES Modules

建议通过本地 HTTP 服务器运行:

18-fetch-async-await
19-es-modules
20-mini-app

如果电脑安装了 Python,可以进入对应实验目录后运行:

python -m http.server 8000

浏览器访问:

http://localhost:8000/

也可以使用:

  • VS Code Live Server
  • 其他本地 HTTP Server
  • GitHub Pages

不建议直接通过:

file://

方式测试 Fetch 和 ES Modules。


推荐学习方式

这套实验不建议只“打开看看”。

每个 Lab 建议至少完成三个步骤。

1. 先运行

先不要修改代码。

观察:

输入是什么?
↓
JavaScript 做了什么?
↓
页面结果是什么?

2. 再阅读

重点阅读:

README.md
+
js/app.js

不要一次研究所有 CSS。

页面样式只是为了帮助观察 JavaScript 结果。


3. 最后修改

每个实验都建议主动修改几个参数。

例如:

price < 100

改成:

price < 50

或者:

category === 'flooring'

改成:

category === 'fence'

然后先预测结果,再刷新页面验证。

推荐形成:

看懂
↓
修改
↓
预测
↓
运行
↓
验证

而不是:

复制
↓
运行
↓
结束

每个实验重点看什么?

每个子目录的 README 都尽量围绕以下问题展开:

  1. 这一章解决什么问题?
  2. 核心 JavaScript 知识是什么?
  3. HTML 承担什么职责?
  4. JavaScript 承担什么职责?
  5. 数据如何流动?
  6. 修改哪里最容易观察结果?
  7. 后面还可以扩展什么?

这样以后复习时,不需要重新阅读整套代码。


JavaScript 的五层理解模型

可以把这 20 个实验进一步抽象成五层。

┌──────────────────────────┐
│       JavaScript App     │
│        综合应用层         │
└────────────▲─────────────┘
             │
┌────────────┴─────────────┐
│ Promise / Fetch / Module │
│        异步与架构         │
└────────────▲─────────────┘
             │
┌────────────┴─────────────┐
│ LocalStorage / JSON      │
│        数据持久化         │
└────────────▲─────────────┘
             │
┌────────────┴─────────────┐
│ DOM / Class / Events     │
│        浏览器交互         │
└────────────▲─────────────┘
             │
┌────────────┴─────────────┐
│ Array / Object / Function│
│        数据与逻辑         │
└──────────────────────────┘

以后遇到 JavaScript 问题时,可以先判断:

当前问题主要属于哪一层?

这会比单纯记忆 API 更容易建立长期知识体系。


项目设计原则

1. 一个实验一个核心问题

尽量避免一个 Lab 同时引入大量新知识。

例如:

03-loop

只研究循环。

不会提前加入:

map()
filter()
reduce()

这些内容留到后面的独立章节。


2. 独立可运行

每个实验都尽量做到:

打开目录
↓
可以单独阅读
↓
可以单独测试
↓
可以单独修改

不会依赖前一个实验才能运行。


3. UI 只辅助学习

本项目不是 UI 组件库。

CSS 只负责:

  • 提高可读性
  • 帮助区分结果
  • 保证电脑和手机基本可用

真正的重点始终是:

JavaScript

4. 优先原生 JavaScript

第一阶段不使用:

  • React
  • Vue
  • jQuery
  • TypeScript
  • Node.js 框架
  • npm
  • Vite
  • Webpack
  • Babel
  • 第三方 UI 框架

目的不是排斥这些工具,而是先把:

JavaScript 本身

真正理解清楚。


5. 不为了模块化而模块化

前面大部分实验只使用:

app.js

直到第 19 章才正式拆分 ES Modules。

原因是:

项目很小时,一个清晰的文件往往比多个小文件更容易维护。

只有当职责开始明显分离时,再拆分模块。


从“语法”到“项目”的变化

整个学习过程可以概括为:

01~04
学习程序语言基础
↓
05~08
学习数据结构
↓
09~12
学习网页交互
↓
13~16
学习数据管理
↓
17~19
学习现代 JavaScript
↓
20
组合成完整应用

最终目标不是背出所有 JavaScript 方法,而是看到需求时能够判断:

需要保存什么数据?
↓
Array / Object

需要什么逻辑?
↓
Condition / Function

需要修改页面吗?
↓
DOM

用户什么时候触发?
↓
Events

数据要保存吗?
↓
LocalStorage / JSON

数据来自外部吗?
↓
Fetch / Promise

代码开始变大了吗?
↓
Modules

与真实 Web 开发的关系

这些实验虽然很小,但背后的知识可以直接迁移到真实项目。

例如产品筛选:

Array
+
filter()
+
DOM
+
Events

Tabs:

dataset
+
classList
+
click

动态产品列表:

Array
+
Object
+
map()
+
Event Delegation

浏览器工具:

Form
+
CRUD
+
LocalStorage
+
JSON

API 页面:

Fetch
+
Promise
+
async/await
+
DOM

因此这些实验并不是彼此孤立的 Demo,而是一套逐步组合的基础知识模块。


第一阶段完成后的能力目标

完成 20 个实验后,建议至少能够理解:

  • JavaScript 中变量、数组、对象和函数的关系
  • 如何通过数组方法处理一组数据
  • JavaScript 如何通过 DOM 控制 HTML
  • Event 如何驱动页面交互
  • Dataset 和 Class 如何管理页面状态
  • 为什么动态列表适合使用事件委托
  • CRUD 的基本数据管理思想
  • 表单数据如何进入 JavaScript
  • LocalStorage 与普通内存数据的区别
  • JSON 与 JavaScript Object 的区别
  • Promise 如何表示未来的异步结果
  • Fetch 如何读取外部数据
  • async/await 与 Promise 的关系
  • 为什么项目变大后需要模块化
  • 如何把多个基础知识组合成一个小型 Web App

后续扩展方向

第一阶段刻意控制在 20 个核心实验。

未来可以继续建立:

JavaScript Development Lab v2

候选方向:

  • Scope 深入
  • Closure
  • this
  • Class
  • Date
  • Math
  • Set
  • Map
  • Regular Expression
  • Error
  • URL
  • URLSearchParams
  • History API
  • Clipboard API
  • File API
  • IntersectionObserver
  • MutationObserver
  • Debounce
  • Throttle
  • Web Components
  • IndexedDB
  • Web Workers

这些知识不建议一次全部加入第一阶段。

更适合继续沿用:

一个核心知识
+
一个独立最小实验

逐步扩展。


适合人群

本项目适合:

  • 正在学习原生 JavaScript
  • 已经看过基础语法,但项目思路仍然模糊
  • 经常能看懂代码,但不知道如何从零组织代码
  • 从 HTML / CSS 开始进入 JavaScript
  • WordPress 前端开发者
  • 希望以后学习 React / Vue / TypeScript,但想先补好 JavaScript 基础
  • 希望建立一套长期可复习的 JavaScript 知识库

技术栈

HTML5
CSS3
Vanilla JavaScript
JSON
Browser Web APIs
ES Modules

不需要安装 npm 依赖。


版本规划

v1.0.0

第一阶段:

20 个 JavaScript 独立最小实验

覆盖:

基础语法
→
数据结构
→
DOM
→
Events
→
CRUD
→
Storage
→
JSON
→
Promise
→
Fetch
→
Modules
→
Mini App

Future

继续保持“小实验优先”的方式扩展更高级的 JavaScript 与 Browser API 知识。


学习原则

这个仓库最重要的不是:

我已经拥有 20 个 Demo。

而是:

我能够通过 20 个最小实验解释 JavaScript 的核心知识是如何连接起来的。

建议始终遵循:

先理解数据
↓
再理解逻辑
↓
再理解 DOM
↓
再理解事件
↓
再理解状态
↓
最后组合成应用

当这些基础真正清晰以后,再进入 React、Vue、TypeScript 或更复杂的工程化体系,会容易很多。


License

本项目主要用于 JavaScript 学习、研究和实验。

如需公开发布,可以根据实际需要增加合适的开源许可证,例如 MIT License。

About

通过 20 个独立最小实验系统学习 JavaScript,覆盖变量、函数、数组、对象、DOM、事件、CRUD、LocalStorage、JSON、Promise、Fetch、Async/Await、ES Modules 与综合 Mini App。

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages