ES6之解构
解构是将对象或数组里的属性提取出来,放到一个变量中。
我们先看对象解构。
const user = {
name: 'xiaoming',
age: 18,
sex: 'male',
address: {
province: 'guangdong',
city: 'shenzhen'
}
}
//定义的是 gender 变量,user 中读取的是sex变量
//同样,address也起到解构的作用
let { name, age, sex: gender='male', address:{
province
} } = user;
console.log(name, age, gender,province);
通过在 {} 中添加变量的形式,可以将属性放到变量中。属性可分为同名属性和不同名属性。同名属性没有什么问题,不同名属性要写到 : 之后。那么会先定义:之后的变量,然后从对象中读取:之前的变量放到后面的变量中。对象解构并不会改变原来的对象。同时,还可以在 = 之后添加默认值。如果属性不存在,则会变为 undefined 。
const numbers = ["a", "b", "c", {
"name": "xiaoming"
}]
// let [n1, n2, n3, n4] = numbers;
// console.log(n1, n2, n3, n4);
const { name: NAME } = numbers[3];
console.log(NAME);
数组解构和对象解构类似,将要赋值的变量放到 [] 里面。同时也可以进行嵌套。如果你要拿到第三项,那么前面就要空出两项的位置。
const { name, ...obj } = user;
console.log(name, obj);
利用展开运算符可以很好地分离两项。注意,展开运算符只能放到最后,否则会造成逻辑错误。
const article = {
title: "文章标题",
content: "文章内容",
comments: [{
content: "评论1",
user: {
id: 1,
name: "用户名1"
}
}, {
content: "评论2",
user: {
id: 2,
name: "用户名2"
}
}]
}
//解构出第二条评论的用户名和评论内容
// name:"用户名2" content:"评论2"
const {
comments: [,
{
content,
user: {
name
}
}
] } = article;
console.log(content, name)
上面这个例子中,展示了如何在嵌套的对象和数组中拿到需要的属性。
平时用的最多的还是参数解构。
function ajax({ method='get', url='/'}={}) {
console.log(method, url)
}
ajax()
如果函数没有传参数,则传入一个默认的空对象,空对象会进行解构出默认值。