ES6(ECMAScript 2015)为JavaScript中的对象引入了一些新的扩展功能。以下是一些主要的ES6对象扩展:
-
对象字面量的增强(Object Literal Enhancements): ES6允许在对象字面量中更简洁地定义属性和方法。您可以省略属性名称和冒号,如果属性名和变量名相同,可以直接使用变量名作为属性名。
const name = "Alice";
const age = 30;
const person = { name, age };
console.log(person); // 输出: { name: 'Alice', age: 30 }
计算属性名(Computed Property Names): 您可以在对象字面量中使用表达式作为属性名,这使得属性名更灵活。
const key = "myKey";
const obj = {
[key]: "myValue"
};
console.log(obj); // 输出: { myKey: 'myValue' }
Object.assign() 方法: Object.assign()
方法用于将一个或多个源对象的属性复制到目标对象。这是一种浅拷贝操作。
const target = { a: 1 };
const source = { b: 2 };
const result = Object.assign(target, source);
console.log(result); // 输出: { a: 1, b: 2 }
Symbol 数据类型: ES6引入了Symbol数据类型,它是一种唯一且不可改变的数据类型,可以用作对象属性的键。这有助于避免属性名冲突。
const mySymbol = Symbol("description");
const obj = {
[mySymbol]: "This is a symbol property"
};
console.log(obj[mySymbol]); // 输出: This is a symbol property
Object.setPrototypeOf() 方法: Object.setPrototypeOf()
方法用于设置对象的原型。
const child = Object.create(parent);
// 设置child对象的原型为parent
Object.setPrototypeOf(child, parent);
Object.getOwnPropertySymbols() 方法: Object.getOwnPropertySymbols()
方法返回对象自身的所有Symbol属性。
const obj = {
[Symbol("a")]: "value"
};
const symbols = Object.getOwnPropertySymbols(obj);
console.log(symbols); // 输出: [Symbol(a)]
Object.freeze() 和 Object.seal() 方法: Object.freeze()
方法用于冻结对象,使其属性不可更改。Object.seal()
方法用于封闭对象,使其属性不可添加或删除。
const obj = { prop: "value" };
Object.freeze(obj);
obj.prop = "new value"; // 这里不会改变属性值,它仍然是"value"
这些是ES6中引入的一些主要对象扩展功能。它们增强了JavaScript中对象的灵活性和功能。