简述ES6的对象方法扩展 ?
ES6(ECMAScript 2015)对对象提供了一系列的新方法和语法糖,以简化对象的操作和声明,提高开发效率。以下是一些主要的对象方法扩展:
1. 属性简写
在对象字面量中,如果属性值的变量名与属性名相同,可以只写一个。
const name = "John";
const age = 25;
// ES5
const personES5 = {
name: name,
age: age
};
// ES6
const personES6 = { name, age };
2. 方法简写
对象字面量中的方法可以不需要使用function
关键字。
const person = {
name: 'John',
greet() {
console.log('Hello!');
}
};
3. 计算属性名
对象字面量中允许使用表达式作为属性名,通过方括号[]
包围。
let propName = "name";
const person = {
[propName]: "John"
};
4. Object.assign()
Object.assign()
方法可以将源对象(一个或多个)中所有可枚举属性复制到目标对象。
const target = { a: 1 };
const source1 = { b: 2 };
const source2 = { c: 3 };
Object.assign(target, source1, source2);
console.log(target); // { a: 1, b: 2, c: 3 }
5. Object.is()
Object.is()
方法比较两个值是否严格相等,类似于===
运算符,但对于某些特殊情况处理更加准确。
console.log(Object.is(NaN, NaN)); // true
console.log(Object.is(0, -0)); // false
console.log(Object.is('foo', 'foo')); // true
6. Object.setPrototypeOf()
Object.setPrototypeOf()
方法设置一个指定的对象的原型(即内部[[Prototype]]
属性)到另一个对象或null
。
const obj = { a: 1 };
Object.setPrototypeOf(obj, { b: 2 });
console.log(obj.b); // 2
7. Object.values() 和 Object.entries()
这两个方法分别返回给定对象自身可枚举属性值的数组和键值对数组。
const obj = { a: 1, b: 2, c: 3 };
console.log(Object.values(obj)); // [1, 2, 3]
console.log(Object.entries(obj)); // [['a', 1], ['b', 2], ['c', 3]]
8. Object.getOwnPropertyDescriptors()
该方法返回指定对象所有自身属性(非继承属性)的描述符。
const obj = { a: 1 };
console.log(Object.getOwnPropertyDescriptors(obj));
这些扩展使得在ES6中处理对象更加灵活和方便,提高了代码的可读性和简洁性。