以下是 ECMAScript 2010(对应 ES5, 2009 年底发布并在 2010 年落地)的总结,继续按照既定结构整理:

🧩 一、总体概览

ECMAScript 5 于 2009 年 12 月正式通过,2010 年成为各大浏览器与 JavaScript 引擎实现该版本的关键年份。 它是 JS 首个“大规模现代化”版本,带来了严格模式、JSON 支持、属性描述符、数组增强等能力,让语言从“脚本”走向“工程级”的转折点。

🚀 二、主要新特性一览

  1. 严格模式("use strict")
'use strict';
var x = 1;
delete x; // TypeError

提供更严格的语义(禁止隐式全局、禁止重复参数、静默失败转为抛错),有助于提前发现问题,也为未来优化铺路。

  1. JSON 内置支持
const obj = JSON.parse('{"id":1}');
const str = JSON.stringify({ ok: true });

原生序列化 / 反序列化 JSON,取代 eval 方案,提升安全性与性能。

  1. 属性描述符与 Object.defineProperty()
Object.defineProperty(obj, 'id', {
    value: 1,
    writable: false,
    enumerable: true,
    configurable: false
});

精确控制属性可写、可枚举、可配置,为框架封装、数据绑定奠定基础。

  1. Object.create()
const user = Object.create(PersonPrototype);

允许以指定原型创建对象,简化继承与原型链操作。

  1. Getter / Setter 语法标准化
const person = {
    get name() { return this._name.toUpperCase(); },
    set name(v) { this._name = v.trim(); }
};

将早期浏览器差异写法纳入标准,实现数据访问拦截与派生属性。

  1. Array 方法扩展
[1, 2, 3].map(x => x * 2);
[1, 2, 3].reduce((sum, x) => sum + x, 0);

新增 forEach、map、filter、some、every、reduce、reduceRight 等高阶方法,推动函数式数组处理普及。

  1. Function.prototype.bind()
const bound = fn.bind(context, presetArg);

固定 this 与部分参数,消除常见的 call/apply 样板代码。

  1. String.prototype.trim()
'  hi  '.trim(); // 'hi'

提供跨平台一致的空白裁剪方法,避免手写正则。

  1. Date 与 parseInt 改进
parseInt('08', 10); // 8

规定 parseInt 默认 10 进制(非 0 前缀八进制),并修正 Date.parse 对 ISO 8601 的解析行为。

  1. 严格模式下的安全限制
'use strict';
arguments.callee; // TypeError

禁用 arguments.callee、禁止非方法调用的 this 自动装箱等,为性能优化与安全性保驾护航。

🧠 三、总结 类型 代表特性 影响 语言语义 严格模式 提前暴露问题,为优化器铺路 数据交换 JSON API 安全快速地序列化/反序列化 对象模型 属性描述符、Object.create、访问器 精细控制对象行为,助力框架设计 数组与函数 数组高阶方法、Function.bind 让函数式与回调模式更易用 兼容性 parseInt、Date 修复等 统一不同实现的边缘行为

📌 整体意义: ECMAScript 5 是现代 JavaScript 的起点:它让语言具备可靠的严格模式、规范的 JSON、强大的对象建模能力和丰富的数组工具。 2010 年各家引擎的实现完成后,前端与 Node.js 才真正有了可依赖的“基础设施”,为随后的 ES6 革命打下坚实根基。