以下是 ECMAScript 2010(对应 ES5, 2009 年底发布并在 2010 年落地)的总结,继续按照既定结构整理:
🧩 一、总体概览
ECMAScript 5 于 2009 年 12 月正式通过,2010 年成为各大浏览器与 JavaScript 引擎实现该版本的关键年份。 它是 JS 首个“大规模现代化”版本,带来了严格模式、JSON 支持、属性描述符、数组增强等能力,让语言从“脚本”走向“工程级”的转折点。
🚀 二、主要新特性一览
'use strict';
var x = 1;
delete x; // TypeError
提供更严格的语义(禁止隐式全局、禁止重复参数、静默失败转为抛错),有助于提前发现问题,也为未来优化铺路。
const obj = JSON.parse('{"id":1}');
const str = JSON.stringify({ ok: true });
原生序列化 / 反序列化 JSON,取代 eval 方案,提升安全性与性能。
Object.defineProperty(obj, 'id', {
value: 1,
writable: false,
enumerable: true,
configurable: false
});
精确控制属性可写、可枚举、可配置,为框架封装、数据绑定奠定基础。
const user = Object.create(PersonPrototype);
允许以指定原型创建对象,简化继承与原型链操作。
const person = {
get name() { return this._name.toUpperCase(); },
set name(v) { this._name = v.trim(); }
};
将早期浏览器差异写法纳入标准,实现数据访问拦截与派生属性。
[1, 2, 3].map(x => x * 2);
[1, 2, 3].reduce((sum, x) => sum + x, 0);
新增 forEach、map、filter、some、every、reduce、reduceRight 等高阶方法,推动函数式数组处理普及。
const bound = fn.bind(context, presetArg);
固定 this 与部分参数,消除常见的 call/apply 样板代码。
' hi '.trim(); // 'hi'
提供跨平台一致的空白裁剪方法,避免手写正则。
parseInt('08', 10); // 8
规定 parseInt 默认 10 进制(非 0 前缀八进制),并修正 Date.parse 对 ISO 8601 的解析行为。
'use strict';
arguments.callee; // TypeError
禁用 arguments.callee、禁止非方法调用的 this 自动装箱等,为性能优化与安全性保驾护航。
🧠 三、总结 类型 代表特性 影响 语言语义 严格模式 提前暴露问题,为优化器铺路 数据交换 JSON API 安全快速地序列化/反序列化 对象模型 属性描述符、Object.create、访问器 精细控制对象行为,助力框架设计 数组与函数 数组高阶方法、Function.bind 让函数式与回调模式更易用 兼容性 parseInt、Date 修复等 统一不同实现的边缘行为
📌 整体意义: ECMAScript 5 是现代 JavaScript 的起点:它让语言具备可靠的严格模式、规范的 JSON、强大的对象建模能力和丰富的数组工具。 2010 年各家引擎的实现完成后,前端与 Node.js 才真正有了可依赖的“基础设施”,为随后的 ES6 革命打下坚实根基。