JavaScript对象新增特性大揭秘
在JavaScript中,对象(Object)是核心的数据结构之一。随着ECMAScript标准的演进,对象新增了许多特性,这些特性使得对象的操作更加灵活和强大。以下是一些重要的新增特性:
1. 属性简写(Property Shorthand)
在ES6中,如果对象的属性名和变量名相同,可以简写属性名。
const name = 'Alice';
const age = 25;
const person = { name, age }; // 等同于 { name: name, age: age }
2. 方法简写(Method Shorthand)
在对象字面量中,方法的定义可以省略function
关键字。
const obj = {
sayHello() {
console.log('Hello!');
}
};
3. 计算属性名(Computed Property Names)
允许在对象字面量中使用表达式作为属性名。
const prop = 'name';
const obj = {
[prop]: 'Alice'
};
console.log(obj.name); // 输出: Alice
4. Object.assign()
用于将一个或多个源对象的可枚举属性复制到目标对象。
const target = { a: 1 };
const source = { b: 2 };
Object.assign(target, source);
console.log(target); // 输出: { a: 1, b: 2 }
5. Object.is()
用于比较两个值是否严格相等,类似于===
,但处理了一些特殊情况(如NaN
和+0
/-0
)。
console.log(Object.is(NaN, NaN)); // 输出: true
console.log(Object.is(+0, -0)); // 输出: false
6. Object.keys()
、Object.values()
、Object.entries()
这些方法分别返回对象自身的可枚举属性名、属性值和键值对数组。
const obj = { a: 1, b: 2 };
console.log(Object.keys(obj)); // 输出: ['a', 'b']
console.log(Object.values(obj)); // 输出: [1, 2]
console.log(Object.entries(obj)); // 输出: [['a', 1], ['b', 2]]
7. Object.getOwnPropertyDescriptors()
返回对象所有自身属性的描述符。
const obj = { a: 1 };
console.log(Object.getOwnPropertyDescriptors(obj));
// 输出: { a: { value: 1, writable: true, enumerable: true, configurable: true } }
8. Object.setPrototypeOf()
和 Object.getPrototypeOf()
用于设置和获取对象的原型。
const obj = {};
const proto = { a: 1 };
Object.setPrototypeOf(obj, proto);
console.log(Object.getPrototypeOf(obj) === proto); // 输出: true
9. Object.fromEntries()
将键值对列表转换为对象。
const entries = [['a', 1], ['b', 2]];
const obj = Object.fromEntries(entries);
console.log(obj); // 输出: { a: 1, b: 2 }
10. 可选链操作符(Optional Chaining)
允许在访问深层嵌套属性时,如果中间某个属性不存在,不会抛出错误,而是返回undefined
。
const obj = { a: { b: 1 } };
console.log(obj.a?.b); // 输出: 1
console.log(obj.c?.d); // 输出: undefined
11. 空值合并操作符(Nullish Coalescing Operator)
用于提供默认值,仅在左侧值为null
或undefined
时返回右侧值。
const obj = { a: null, b: 0 };
console.log(obj.a ?? 'default'); // 输出: 'default'
console.log(obj.b ?? 'default'); // 输出: 0
12. Object.hasOwn()
用于检查对象是否具有指定的自身属性。
const obj = { a: 1 };
console.log(Object.hasOwn(obj, 'a')); // 输出: true
console.log(Object.hasOwn(obj, 'b')); // 输出: false
这些新增特性极大地增强了JavaScript对象的功能和灵活性,使得开发者能够更高效地处理对象相关的操作。