ES6系列 变量的赋值与解构

343 阅读2分钟

往期内容

1.数组的解构与赋值

1.1基本用法:

ES6 允许从数组和对象中提取值,对变量进行赋值,这种套路称为解构(Destructuring)。

// 固定值 单个提取
const [a, b, c] = [1, 2, 3];
console.log(a) // 1
console.log(b) // 2
console.log(c) // 3

// 过滤值 间隔提取
const [ , , b] = [1, 2, 3];
console.log(b) // 3

const [a, , b] = [1, 2, 3];
console.log(a) // 1
console.log(b) // 3

// 单个值 数组提取
let [a, ...b] = [1, 2, 3, 4];
console.log(a) // 1
console.log(b) // [2, 3, 4]

let [a, b, ...c] = [1];
console.log(a) // 1
console.log(b) // undefined //如果解构不了,那么变量的值就等于undefined。
console.log(c) // []

let [a, b] = [1, 2, 3];
console.log(a) // 1
console.log(b) // 2

let [a, [b], d] = [1, [2, 3], 4];
console.log(a) // 1
console.log(b) // 2

// 都是套路你掌握了么 
// 只要顺序对,就能搞到手

1.2 默认值

解构赋值允许指定默认值

let [a = 1] = [];
console.log(a) // 1 // true

let [a, b = 'b'] = ['a']; 
console.log(a) // a
console.log(b) // b

// 你是否用过这样的套路
function test(count = 1){
    console.log(count)
}

test()

2. 对象结构赋值

2.1基本用法:

解构不仅可以用于数组,还可以用于对象。结构对象往往是我们开发中常用的骚操作

const { banana, apple } = { banana: 3.2, apple: 4.5 };
console.log(banana) // 3.2
console.log(apple) //  4.5
console.log(coconut) // undefined

对象的解构与数组有一点不同,数组的取值由它的位置决定;而对象变量必须与属性同名,才能取到正确的值。

对象的解构赋值可以变成别名,可以理解为,对象的解构赋值,是先找到同名属性,然后再赋给对应的变量。真正被赋值的是 :后者,而不是前者。

const { banana:bigBanana, apple } = { banana: 3.2, apple: 4.5 };
console.log(bigBanana) // 3.2
console.log(banana) //Uncaught ReferenceError: foo is not defined

到这里你可能会有疑问,数组解构可以有默认值,对象有么? 当然制定ES6标准的人当然想的到。

2.2 对象的解构默认值:

let {a = 1} = {};
console.log(a) // 1

let {a, b = 2} = {a: 1};
console.log(a) // 1
console.log(b) // 3

let {a: b = 1} = {};
console.log(b) // 1

let {x: b = 2} = {x: 1};
console.log(b) // 1

let { message: msg = '都是套路' } = {};
msg // "都是套路"

3. 字符串的解构

字符串同样可以解构赋值。这是因为字符串被转换成了一个类似数组的解构。

const [a, b, c, d, e] = `banana`;
console.log(a, b, c, d, e);

4.函数参数的解构赋值

function test([x, y]){
  return x + y;
}

console.log(test([1, 2])); // 3


function test({ banana, apple} = { banana:1, apple:1}){
  return banana + apple; // return [banana , apple]; // 换一下你会发现新的套路
}

console.log(test({ banana:3, apple: 2 })); // 5 || [3,2]
console.log(test({ banana:3})); //NaN || [3, undefined]
console.log(test({ })); // NaN || [undefined, undefined]
console.log(test()); // 2 || [1,1]

下面是我工作中常用的套路

下面是我的公众号大家一起写文章呀。