在 JavaScript 和 Vue.js 中,对象有多种简写形式可以简化代码。
以下是常见的对象简写方式及示例:
1. 属性简写(同名省略)
当属性名和变量名相同时,可以省略键值:
// 传统写法
const name = 'Alice';
const age = 25;
const user = {
name: name,
age: age
};
// 简写形式
const user = { name, age };
// 等价于 { name: name, age: age }
2. 方法简写(省略 : function)
对象方法可以省略 : function:
// 传统写法
const obj = {
sayHello: function() {
console.log('Hello');
}
};
// 简写形式
const obj = {
sayHello() {
console.log('Hello');
}
};
3. 计算属性名(动态键名)
使用 [] 包裹表达式作为属性名:
const key = 'user_' + Math.random();
const obj = {
[key]: 'Alice' // 键名由表达式计算结果决定
};
4. Vue 特定简写
(1)v-bind 简写
<!-- 传统写法 -->
<img v-bind:src="imageSrc">
<!-- 简写形式 -->
<img :src="imageSrc">
(2)v-on 简写
<!-- 传统写法 -->
<button v-on:click="handleClick">Click</button>
<!-- 简写形式 -->
<button @click="handleClick">Click</button>
5. 对象展开运算符(...)
合并对象时可以使用展开运算符:
const obj1 = { a: 1 };
const obj2 = { b: 2 };
const merged = { ...obj1, ...obj2 };
// 结果: { a: 1, b: 2 }
6. 解构赋值简写
从对象中提取属性时简写:
const user = { name: 'Alice', age: 25 };
// 传统写法
const name = user.name;
const age = user.age;
// 简写形式
const { name, age } = user;
7. Vuex 中的简写
(1)mapState 简写
// 传统写法
computed: {
count() {
return this.$store.state.count;
}
}
// 简写形式
import { mapState } from 'vuex';
computed: {
...mapState(['count'])
}
(2)mapActions 简写
// 传统写法
methods: {
increment() {
this.$store.dispatch('increment');
}
}
// 简写形式
methods: {
...mapActions(['increment'])
}
8. 箭头函数简写
对象方法中使用箭头函数时需注意 this 绑定:
const obj = {
// 传统写法
sayHi: function() {
console.log(this.name);
},
// 箭头函数简写(会丢失this绑定)
sayHi: () => {
console.log(this.name); // 可能得到undefined
}
};
9. 默认值简写
// 传统写法
const options = {
timeout: options.timeout || 3000
};
// 简写形式
const options = {
timeout: 3000 // 直接写默认值
};
关键区别总结
| 场景 | 传统写法 | 简写形式 |
|---|---|---|
| 同名属性 | { name: name } |
{ name } |
| 对象方法 | { sayHi: function(){} } |
{ sayHi(){} } |
| 动态属性名 | 需额外声明变量 | { [key]: value } |
| Vue指令 | v-bind:src / v-on:click |
:src / @click |
| 对象合并 | Object.assign({}, a, b) |
{ ...a, ...b } |
这些简写形式能让代码更简洁,但需注意在团队项目中保持风格一致。
