🧱 ES3(1999)
一句话定性
ES3 是 JavaScript 的**“地基浇筑”版本**:它本身没有任何耀眼的创新,但它第一次足够完整、又恰好被 IE6 锁死了整整十年——于是它成了 jQuery 这代库赖以生存的”最大公约数”,也成了一代前端工程师的”原生语言”。
一、它是什么 & 出现的时代
ES3 发布于 1999 年 12 月,是 ECMAScript 标准的第三版(ES1/ES2 太早、太基础,几乎没人记得)。它出现在 第一次浏览器战争的尾声——IE 即将凭借捆绑分发碾压 Netscape,IE5/IE6 实现的就是 ES3。
这个时间点至关重要:IE6(2001)拿下 90%+ 市场后,微软几乎停止了浏览器创新长达五年。结果是,IE6 所支持的 ES3,事实上成了”网页能跑的 JavaScript”的天花板,一锁就锁到了 2009 年 ES5 出现、甚至 2015 年 IE6 退场。
为什么我们今天还在意 ES3?
二、为什么会出现(解决上一代什么痛点)
ES1(1997)只是把语言”标准化”了,但它非常基础——连正则表达式和像样的异常处理都没有。在真实业务里:
- 表单校验需要正则,但 ES1 没有
RegExp,只能用蹩脚的字符串拼接。 - 代码出错只能整页崩溃,没有
try/catch来优雅处理。 - 字符串/数组操作方法太少,处理数据极其啰嗦。
ES3 就是来补这些”日常刚需”的。它不追求革命,只追求**“让 JS 能干正经活”**。
三、关键特性 & 为什么重要
| 特性 | 解决了什么实际问题 |
|---|---|
正则表达式 RegExp | 表单校验、字符串匹配的刚需。没有它,验证一个邮箱地址都是噩梦 |
try/catch/finally 异常处理 | 让错误可以被捕获和恢复,而不是整页脚本崩溃 |
switch 语句 | 多分支逻辑的标准写法 |
do-while 循环 | 补全循环结构 |
| 更丰富的 String 方法 | split(支持正则)、replace(支持正则+回调) 等,数据处理能力质变 |
Function.prototype.apply/call | 这是 jQuery 时代的隐形支柱:借用方法、改变 this 指向、处理 arguments,几乎所有库都重度依赖它 |
ES3 最深远的影响:它"够用"且"被冻结",于是催生了"库的时代"
ES3 本身能力有限——没有模块、没有 class、没有 Promise、没有原生的
forEach。但它稳定、可预测、到处都一样。这反而创造了一个机会:既然语言十年不变,那就用库来填补它的不足。jQuery 正是 ES3 的产物:它用 ES3 仅有的工具(
apply/call、原型链、闭包),封装出$()选择器、链式调用、动画、Ajax——把”抹平浏览器差异”和”补齐语言缺失”打包成了一个库。可以说,ES3 的”贫瘠”是 jQuery 繁荣的土壤。
四、带来的新问题 / 副作用
ES3 的"够用"也是一种诅咒
- 十年停滞的天花板:因为 IE6 锁死在 ES3,即便 ES5(2009)发布了,开发者也多年不敢用——只要还要兼容 IE,你就只能写 ES3。语言进步与现实可用之间裂开了巨大的鸿沟。
- 没有模块系统:所有代码都是全局变量,大型项目靠”命名空间对象 + IIFE(立即执行函数)“勉强隔离,污染和冲突是家常便饭。这个空缺直接催生了后来的 AMD 模块大战。
- 没有原生迭代/函数式方法:
forEach、map、filter都没有,只能for (var i...)手写循环——这也是 jQuery 的$.each大行其道的原因。- 语言坑全部保留:
var提升、this丢失、==陷阱在 ES3 里一应俱全,且因为兼容性永远无法修复。
五、对后续技术的影响(因果链)
ES3 (1999) 第一个"够用"的版本
│
├──► 恰好被 IE6 实现并锁死十年 (2001~2014)
│ │
│ ↓
│ 成为"网页能跑的 JS"的事实天花板
│ │
│ ├──► 语言贫瘠(无模块/无 class/无 forEach)
│ │ │
│ │ ↓
│ │ 用"库"填补语言空缺 ──► [[jQuery]] (2006) 称王
│ │ (apply/call + 原型链 + 闭包)
│ │
│ └──► 全局变量泛滥,无模块 ──► 催生模块化需求 ──► [[ES-Modules]]
│
↓
ES3 停滞十年的痛苦 ──► 直接定义了 [[ES5]](2009)的务实目标:
"先把日常缺失的工具补齐"
历史地位
ES3 是 JavaScript 的”经典力学时代”:简单、稳定、无处不在,也充满局限。它最大的历史意义在于——因为它十年不变,前端被迫在”库”这个层面创新,于是有了 jQuery 这样定义一个时代的作品。当你理解了”为什么 jQuery 必须存在”,你就理解了 ES3 那份”贫瘠的稳定”在历史上的位置。
🔗 时代背景:1995-2005 浏览器时代 | 2005-2013 Ajax时代 🔗 版本脉络:ECMAScript演进史 | 下一版 → ES5 🔗 相关:jQuery | ES-Modules