第五章 解构:更方便的数据访问
对象解构
type与
name`既声明了本地变量,也读取了对象的相应属性值。
var node = {
type: "HAHA",name:" XIXIXI"
}
let { type, name } = node;
`赋值表达式中使用数组解构需要添加圆括号(花括号被视为代码块,代码块不允许复制)。
let type = 5,
name = 6
;({ type, name } = node)
解构表达式传入的值为等号(=)右侧的值。
function outputInfo(value) {
console.log(value === node); // true
}
outputInfo({ type, name } = node);
可以指定默认值,如果没有指定默认值且对象中没有同名对象,则默认值为 undefined。
let { type, name, value = true } = node;
赋值给非同名变量(可以理解为将冒号左侧变量的值赋给右侧的变量),同样可以添加默认值
let { type: localType, name: localName = "HAHA" } = node;
可以嵌套多层。
let { loc: { start: localStart }} = node;
可以嵌套多层。
数组解构
数组解构使用的是方括号[],赋值与变量名无关,只与位置有关,上面的写法可以只获取第三项的值。
赋值表达式中使用数组解构,可以不加圆括号。
let colors = [ "red", "green", "blue" ];
let [ , , thirdColor ] = colors;
交换 ab 值技巧。
let a = 1,b = 2;
[ a, b ] = [ b, a ];
数组解构默认值规则与对象解构类似。
可以使用剩余项(可以利用剩余项克隆数组)。
let [ firstColor, ...restColors ] = colors;
混合解构
对象解构和数组解构混合使用
let {
loc: { start },
range: [ startIndex ]
} = node;
参数解构
如果第三项参数作为可选项(即有可能不传入值),需要添加一个空对象作为其默认值。
function setCookie(name, value, { secure, path, domain, expires } = {}) {}
实际上参数解构是解构声明的简写
function setCookie(name, value, options) {
let { secure, path, domain, expires } = options;
}
当没有值传入时,options 的值为 undefined,但解构右侧的值为’null’与’undefined’时会报错。