解构:更方便的数据访问

Wednesday, August 21, 2019

第五章 解构:更方便的数据访问

对象解构

typename`既声明了本地变量,也读取了对象的相应属性值。

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’时会报错