跳到主要内容

Object 对象扩展

  • 对象字面量扩展提供了一些简洁的语法来定义对象属性和方法

属性扩展

1. 计算属性

  • 计算属性允许你使用表达式作为属性名
let propName = 'age';
let person = {
name: 'Alice',
[propName]: 30
};

logd(JSON.stringify(person)) // 输出: { name: 'Alice', age: 30 }

2. 简写属性

  • 如果属性名和变量名相同,可以使用简写语法
let name = 'Alice';
let age = 30;

let person = { name, age };
logd(JSON.stringify(person)) // 输出: { name: 'Alice', age: 30 }

3. 简写方法

  • 在对象字面量中定义方法时,可以省略 function 关键字
let person = {
name: 'Alice',
greet() {
return `Hello, ${this.name}!`;
}
};

logd(person.greet()); // 输出: Hello, Alice!

4. 字符串键简写方法

  • 即使方法名是字符串,也可以使用简写语法
let person = {
name: 'Alice',
'greet'() {
return `Hello, ${this.name}!`;
}
};

logd(person.greet()); // 输出: Hello, Alice!

5. 计算简写方法

  • 可以使用计算属性名来定义方法
let methodName = 'greet';
let person = {
name: 'Alice',
[methodName]() {
return `Hello, ${this.name}!`;
}
};

logd(person.greet()); // 输出: Hello, Alice!

6. 计算访问器

  • 可以使用计算属性名来定义 gettersetter
let propName = 'age';
let person = {
name: 'Alice',
_age: 30,
get [propName]() {
return this._age;
},
set [propName](value) {
this._age = value;
}
};

logd(person.age); // 输出: 30
person.age = 31;
logd(person.age); // 输出: 31

方法扩展

1. Object.values

  • Object.values 方法返回一个数组,包含对象自身可枚举属性的值
let obj = { a: 1, b: 2, c: 3 };
let values = Object.values(obj);
logd(values);
// EC输出: 1, 2, 3
logd(JSON.stringify(values))
// 实际内容: [1, 2, 3]

2. Object.entries

  • Object.entries 方法返回一个数组,包含对象自身可枚举属性的键值对数组
let obj = { a: 1, b: 2, c: 3 };
let entries = Object.entries(obj);
logd(entries);
// EC输出: a,1,b,2,c,3
logd(JSON.stringify(entries))
// 实际内容: [['a', 1], ['b', 2], ['c', 3]]