ES6(ECMAScript 2015)引入了一种新的表达式——解构赋值(Destructuring assignment),允许你直接从数组或对象中提取数据,赋值给声明的变量。这种方式使得数据提取更加简洁明了。
数组解构赋值
数组解构赋值允许你从数组中提取值,然后按照你指定的模式对变量进行赋值。
基本用法:
let [a, b, c] = [1, 2, 3];
console.log(a); // 1
console.log(b); // 2
console.log(c); // 3
默认值:
如果数组中的某些位置没有值,解构赋值允许你为变量指定默认值。
let [x, y = 'default', z] = [1];
console.log(x); // 1
console.log(y); // 'default'
console.log(z); // undefined
不完全解构:
如果不需要数组中的所有值,可以只解构你需要的部分。
let [, , z] = [1, 2, 3];
console.log(z); // 3
嵌套数组解构:
解构赋值也支持嵌套数组。
let [a, [b], c] = [1, [2, 3], 4];
console.log(a); // 1
console.log(b); // 2
console.log(c); // 4
对象解构赋值
对象解构赋值允许你从对象中提取值,然后按照你指定的模式对变量进行赋值。
基本用法:
let { foo, bar } = { foo: 'hello', bar: 'world' };
console.log(foo); // 'hello'
console.log(bar); // 'world'
默认值:
同样地,你可以为变量指定默认值。
let { baz = 'default' } = {};
console.log(baz); // 'default'
重命名变量:
在解构时,你也可以将对象的属性赋值给与属性名不同的变量。
let { foo: baz } = { foo: 'hello' };
console.log(baz); // 'hello'
嵌套对象解构:
解构赋值也支持嵌套对象。
let { user: { name, age } } = { user: { name: 'John', age: 30 } };
console.log(name); // 'John'
console.log(age); // 30
参数解构:
解构赋值在函数参数中也非常有用,可以使函数签名更加清晰。
function greet({ name, greeting = 'Hello' }) {
console.log(`${greeting}, ${name}!`);
}
greet({ name: 'Alice' }); // Hello, Alice!
解构赋值是ES6中非常强大且实用的特性,可以极大地简化代码,提高代码的可读性和可维护性。