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 允许为对象定义属性的 getter
和 setter
,以便在访问和设置属性值时执行特定的逻辑。
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 引入了多项新特性和改进,旨在增强语言的功能性、可读性和安全性。