Skip to content

ECMAScript 2009

ECMAScript 2009(简称 ES5)于 2009 年 12 月发布。

核心特性

1. 严格模式(Strict Mode)

ES5 引入了严格模式,这是一种通过在脚本或函数的开头添加 "use strict"; 声明来选择采用更严格的解析和错误处理的方式。严格模式下,某些不安全或不合理的语法将被禁止,从而提高代码的健壮性和安全性。

javascript
"use strict";
x = 10; // 抛出错误,因为 x 未声明

2. 原生 JSON 支持

提供了原生的 JSON 对象,用于解析和字符串化 JSON 数据。这使得处理 JSON 数据更加方便和高效。

javascript
const jsonString = '{"name": "Alice", "age": 25}';
const obj = JSON.parse(jsonString);
console.log(obj.name); // 输出: Alice

const newJsonString = JSON.stringify(obj);
console.log(newJsonString); // 输出: {"name":"Alice","age":25}

3. 对象属性的增强

ES5 引入了多种方法来增强对对象属性的操作:

  • Object.defineProperty()Object.defineProperties():用于精确添加或修改对象的属性。
  • Object.getOwnPropertyDescriptor():获取对象属性的描述符。
  • Object.keys():返回对象自身可枚举属性的数组。
javascript
const obj = {};
Object.defineProperty(obj, "name", {
  value: "Alice",
  writable: false,
  enumerable: true,
  configurable: false,
});

console.log(obj.name); // 输出: Alice
obj.name = "Bob";
console.log(obj.name); // 输出: Alice(因为 writable: false)

4. 数组方法的扩展

ES5 为数组引入了多个新的方法,增强了数组操作的能力:

  • forEach():对数组的每个元素执行一次提供的函数。
  • map():创建一个新数组,其结果是对原数组的每个元素调用一个提供的函数后的返回值。
  • filter():创建一个新数组,其包含通过所提供函数实现的测试的所有元素。
  • reduce():对数组的每个元素执行一个提供的函数,将其结果汇总为单个值。
  • some()every():测试数组中的某些或所有元素是否通过了所提供函数的测试。
javascript
const numbers = [1, 2, 3, 4, 5];

const doubled = numbers.map((n) => n * 2);
console.log(doubled); // 输出: [2, 4, 6, 8, 10]

const evens = numbers.filter((n) => n % 2 === 0);
console.log(evens); // 输出: [2, 4]

5. 函数绑定:Function.prototype.bind()

bind() 方法创建一个新的函数,在调用时,其 this 值是提供的值,且在调用新函数时,提供的参数序列将作为新函数的前置参数。

javascript
const module = {
  x: 42,
  getX: function () {
    return this.x;
  },
};

const retrieveX = module.getX;
console.log(retrieveX()); // 输出: undefined,因为函数的 this 值未绑定

const boundGetX = retrieveX.bind(module);
console.log(boundGetX()); // 输出: 42

6. 展开运算符

ES5 允许为对象定义属性的 gettersetter,以便在访问和设置属性值时执行特定的逻辑。

javascript
const person = {
  firstName: "John",
  lastName: "Doe",
  get fullName() {
    return `${this.firstName} ${this.lastName}`;
  },
  set fullName(name) {
    [this.firstName, this.lastName] = name.split(" "); 
  },
};

console.log(person.fullName); // 输出: John Doe
person.fullName = "Jane Smith";
console.log(person.firstName); // 输出: Jane
console.log(person.lastName); // 输出: Smith

兼容性

Chrome 23+
Firefox 21+
Safari 6.1+
Edge 12+
IE 9+

注:兼容性数据可能随着版本的更新而有所调整,建议开发者根据项目的具体需求参考最新的浏览器版本和 Polyfill 支持情况。

总结

ECMAScript 2009(ES5),是 JavaScript 语言的一个重要版本。ES5 引入了多项新特性和改进,旨在增强语言的功能性、可读性和安全性。

Released under the MIT License.