第 1 章 什么是JavaScript
JavaScript在浏览器中由ECMAScript语言、DOM文档接口与BOM浏览器接口共同构成,三者版本与责任不能混为一谈。
直觉:先画执行与所有权
JavaScript在浏览器中由ECMAScript语言、DOM文档接口与BOM浏览器接口共同构成,三者版本与责任不能混为一谈。 真正的难点不是让一次示例得到预期输出,而是让绑定、对象、任务、权限和资源在异常、取消、重复与版本切换后仍可解释。先预测:若只保存最终截图,最可能隐藏哪一种陈旧状态?
权威目录定位
本页依据 Wiley 第4版官方31页目录样章与中文版公开完整目录锁定范围。目录名称用于一对一追踪,正文为独立教学重构;新浏览器差异、安全与可观察性补充会明确披露:
- 1.1 简短的历史回顾
- 1.2 JavaScript实现
- 1.2.1 ECMAScript
- 1.2.2 DOM
- 1.2.3 BOM
- 1.3 JavaScript版本
- 1.4 小结
本页逐项覆盖 7 个公开目录条目,并纳入正常、边界、失败和恢复验收。
核心概念与所有权
、、、、。 每个概念都要回答:谁创建输入,状态保存在哪里,哪个任务或版本可修改它,结束后由谁清理。
| # | 概念 | 工程含义 |
|---|---|---|
| 1 | ECMAScript | 由ECMA-262定义的语言语法、类型、语句、关键字与标准内置对象规范。 |
| 2 | DOM | 把HTML或XML文档表示为可编程节点树的文档对象模型。 |
| 3 | BOM | 由浏览器暴露窗口、位置、历史、导航器等宿主能力的对象模型。 |
| 4 | 宿主环境 | 承载JavaScript引擎并提供语言规范之外API的运行环境。 |
| 5 | 实现一致性 | 引擎与宿主对标准特性的语义和边界保持可验证兼容的程度。 |
机制拆解
1. 三层责任图
ECMAScript决定变量、函数和对象语义;DOM决定如何读取与修改文档;BOM提供窗口和浏览器级能力。遇到问题先判断它属于语言、文档还是宿主,才能找到正确规范和兼容边界。
先预测:若省略这一层,哪个绑定、任务、权限或资源会先偏离?
2. 版本名不能替代能力证据
浏览器声称支持某个版本,不代表每项特性都完整且无缺陷。代码应围绕所需语义做能力检测,并在测试矩阵中记录引擎版本、文档模式和安全上下文。
先预测:若省略这一层,哪个绑定、任务、权限或资源会先偏离?
3. 历史解释兼容负担
JavaScript从网页脚本成长为通用语言时保留了大量早期行为。理解标准化、DOM演进和BOM事实标准的来源,有助于区分必须兼容的语义与已经不应采用的旧模式。
先预测:若省略这一层,哪个绑定、任务、权限或资源会先偏离?
六阶段证据链
可操作链条是:识别运行环境 → 区分语言与宿主 → 查询标准版本 → 检测实际能力 → 构造降级路径 → 跨浏览器签发。正常样本证明能力,边界样本证明预算,失败样本证明拒绝,恢复样本证明任务、状态和资源重新收敛。
最小可运行实验
以下代码用于独立观察本页机制;生产实现还需加入输入验证、兼容策略、权限、取消与清理。
const capability = {
language: typeof Symbol === "function",
dom: !!document.querySelector,
bom: "history" in window,
};
console.table(capability);证据记录把目录、运行时与状态摘要放在一起:
book: JavaScript高级程序设计(第4版)
page: jpg-01-what-is-javascript
official_entries: 7
sample: normal | boundary | failure | recovery
browser_version: fixed
input_fixture: fixed
first_divergence: null
cleanup_complete: true故障脚本一次只改变一个变量:
baseline -> inject(exception | cancel | duplicate | denied | stale-cache)
observe -> stop_at_first_divergence
recover -> replay_same_runtime_and_input
assert -> one_state_owner && stable_output && no_stale_task && no_resource_leak常见误区与故障注入
验收矩阵
| 样本 | 输入与环境变化 | 预期状态 | 通过条件 |
|---|---|---|---|
| 正常 | 合法输入、权限、顺序与版本 | 六阶段完成 | 输出和状态摘要一致 |
| 边界 | 空值、极限容量、重复事件或慢任务 | 达到预算不越界 | 主线程与内存有界 |
| 失败 | 异常、取消、拒权、断网或旧产物 | 首偏离点停止 | 明确传播、回滚或降级 |
| 恢复 | 修复后重放同一输入 | 收敛到正常轨迹 | 无陈旧任务、监听器和资源泄漏 |
本页签发不变量是:语言、DOM和BOM责任可区分;所需能力以运行证据确认;不支持时有明确降级。 单次成功、平均耗时或最终截图不能替代运行时版本、执行轨迹、首偏离点与清理证据。
练习
小结
- ECMAScript:由ECMA-262定义的语言语法、类型、语句、关键字与标准内置对象规范。
- DOM:把HTML或XML文档表示为可编程节点树的文档对象模型。
- BOM:由浏览器暴露窗口、位置、历史、导航器等宿主能力的对象模型。
- 宿主环境:承载JavaScript引擎并提供语言规范之外API的运行环境。
- 实现一致性:引擎与宿主对标准特性的语义和边界保持可验证兼容的程度。
- 六阶段机制链已经映射到正常、边界、失败与恢复证据。
- 官方目录逐项追踪,现代补充不会冒充原书正式分节。