所有能被 JavaScript 重写的,终将被 JavaScript 重写。

JavaScript 简史
javaScript 诞生于 1995 年。
当时因特网用户都使用速度仅为 28.8 kbit/s 的“猫”上网,想象一下:用户填写完一个表单,单击【提交】按钮,然后等待 30 秒,最终服务器返回消息说有一个必填字段没有填好……
走在技术革新最前沿的 Netscape 公司,决定着手开发一种客户端语言 LiveScript,用来处理这种简单的验证。
为了搭上媒体热搜 Java 的顺风车,临时把 LiveScript 改名为 JavaScript。
1996 年,发布 JavaScript 1.1
1997 年,TC39 完成了 ECMAScript 的新脚本语言的标准。
1998 年,ISO/IEC (国际标准化组织和国际电工委员会)也采用了 ECMAScript 作为标准 (即 ISO/IEC-16262)
一个完整的 JavaScript 实现由三个不同的部分组成
- 核心(ECMAScript)
- 文档对象模型(DOM)
- 浏览器对象模型(BOM)
ECMAScript
ECMA-262 定义的只是这门语言的基础,而在此基础之上可以构建更完善的脚本语言。
ECMA-262 第 2 版主要是编辑加工。
ECMA-262 第 3 版标志着 ECMAScript 成为了一门真正的编程语言。
修改的内容涉及:
- 字符串处理
- 错误定义
- 数值输出
新增的内容:
- 正则表达式
- 新控制语句
- try-catch 异常处理的支持
ECMA-262 第 4 版进行全面的检核修订
ECMA-262 第 5 版发布于 2009 年 12 月 3 日。
| 浏览器 | ECMAScript 兼容性 | 浏览器 | ECMAScript 兼容性 |
|---|---|---|---|
| Netscape Navigator 2 | -- | Opera 6 ~ 7.1 | 第2版 |
| Netscape Navigator 3 | -- | Opera 7.2 | 第3版 |
| Netscape Navigator 4 ~ 4.05 | -- | Opera 11.60 | 第5版 |
| Netscape Navigator 4.06 ~ 4.79 | 第1版 | Safari 1 ~ 2.0.x | 第3版* |
| Netscape 6+(Mozilla 0.6.0+) | 第3版 | Safari 3.x | 第3版 |
| IE3 | -- | Safari 4.x ~ 5.x | 第5版* |
| IE4 | -- | Safari 11.1+ | 第5版 |
| IE5 | 第1版 | Safari 13 ~ 14 | 第6版 |
| IE5.5 ~ IE7 | 第3版 | Firefox 1 ~ 2 | 第3版 |
| IE8 | 第5版* | Firefox 3.0.x | 第3版 |
| IE9+ | 第5版 | Firefox 3.5 ~ 3.6 | 第5版* |
| Chrome 1+ | 第3版 | Firefox 4.0+ | 第5版 |
| Chrome 7.5+ | 第5版 | Firefox 6.8 ~ 7.9 | 第6版 |
| Chrome 8.1 ~ 8.5 | 第6版 | ||
| *不完全兼容的实现 |
DOM
DOM Level 1 于 1998 年 10 月成为 W3C 的推荐标准。主要是映射文档的结构。
DOM Level 2 引入新模块
- DOM 视图(DOM Views)
- DOM 事件(DOM Events)
- DOM 样式(DOM Style)
- DOM 遍历和范围(DOM Traversal and Range)
DOM Level 3 进一步扩展了 DOM
- 在 DOM 加载和保存( DOM Load and Save)模块中定义
- 在 DOM 验证( DOM Validation)模块中定义
| 浏览器 | DOM 兼容性 |
|---|---|
| Netscape Navigator 1. ~ 4.x | -- |
| Netscape 6+(Mozilla 0.6.0+) | DOM1、DOM2(几乎全部)、DOM3(部分) |
| IE2 ~ IE4.x | -- |
| IE5 | DOM1(最小限度) |
| IE5.5 ~ IE8 | DOM1(几乎全部) |
| IE9 | DOM1、DOM2、DOM3 |
| Opera 1 ~ 6 | -- |
| Opera 7 ~ 8.x | DOM1(几乎全部)、DOM2(部分) |
| Opera 9 ~ 9.9 | DOM1、DOM2(几乎全部)、DOM3(部分) |
| Opera 10+ | DOM1、DOM2、DOM3(部分) |
| Safari 1.0.x | DOM1 |
| Safari 2+ | DOM1、DOM2(部分) |
| Chrome 1+ | DOM1、DOM2(部分) |
| Firefox 1+ | DOM1、DOM2(几乎全部)、DOM3(部分) |
BOM
BOM 只处理浏览器窗口和框架。比如:
- 弹出新浏览器窗口的功能
- 移动、缩放和关闭浏览器窗口的功能
- 提供浏览器详细信息的 navigator 对象
- 提供浏览器所加载页面详细信息的 location 对象
- 提供用户显示器分辨率详细信息的 screen 对象
- 对 cookies 的支持
- 像 XMLHttpRequest 和 IE 的 ActionXObject 这样的自定义对象

在 HTML 中使用 JavaScript
向 HTML 页面中插入 JavaScript 的主要方法,是使用 <script> 元素。该元素由 Netscape 创造,并在 Netscape Navigator 2 首先实现。其中 HTML 4.01 为 <script> 定义了下列 6 个属性:
- async: 可选。同步下载脚本,不妨碍页面中其他操作。
- charset: 可选。通过 src 属性指定的代码的字符集。
- defer: 可选。脚本可以延迟到文档完全被解析和显示之后再执行。
- language: 现已废弃。
- src: 可选。包含要执行代码的外部脚本文件。
- type: 编写代码使用的脚本语言的内容类型,一般为
text/javascript。实际上,服务器在传送 JavaScript 文件时使用的 MIME 类型通常是application/x-javascript。
使用 <script> 元素的方式有两种:
- 直接在页面中嵌入 JavaScript 代码
- 包含外部 JavaScript 文件
一般情况下,外部 JavaScript 文件带有
.js扩展名。但这个扩展名不是必需的,因为浏览器不会检查包含 JavaScript 的文件的扩展名。这样一来,使用 PHP 等服务器端语言动态生成 JavaScript 代码也就成为了可能。
使用外部文件来包含 JavaScript 代码是目前公认最好的做法,外部的文件可以放在 CDN 上,使得用户在加载页面时更快。比起在 HTML 中嵌入,使用外部文件的人大多都会强调这几个优点:
- 可维护性强
- 可缓存
- 适应未来
元素
用在当不支持 JavaScript 的浏览器或浏览器支持脚本,但脚本被禁用中显示替代的内容。除此之外的其他情况下,浏览器不会呈现 <noscript> 中的内容。
<html>
<body>
<noscript>
<p> 本页面需要浏览器支持(启用) JavaScript</p>
</noscript>
</body>
</html>
