《ECMAScript 6 入门》【二、变量的解构赋值】(持续更新中……)

简介: 本系列是针对于阮一峰大佬的文章进行简化,更方便的让大家学习阅读

前言:


让我们看下es6的新语法解构,跟模式匹配类似。


一、数组的解构赋值


举个例子给多个变量赋值的写法:


var a =1;
var b =2;
var c =3;


需要写多个变量特别麻烦,我们先使用以前的简化方法。


var a=1,b=2,c=3;


现在es6引入了解构,我们可以使用数组的解构赋值来更简便的进行赋值。


1、完全解构


let [a,b,c]=[1,2,3];


可以从数组中提取值,按照对应位置,对变量赋值。本质上,这种写法属于“模式匹配”,只要等号两边的模式相同,左边的变量就会被赋予对应的值。 接下来,我们再举几个例子:


// 1、一一对应
let [,,v]=[,,1];
console.log(v) // 1
// 2、可以利用扩展符合并数组项
let [a,...b]=[1,2,3];
console.log(a) // 1
console.log(b) //[2,3]
// 3、如果左边不能一一对应右边的话,使用扩展符并且位置在末尾时,打印的为空数组,c没有对应,则是undefined;
let [a,c,...b]=[1];
console.log(a); // 1
console.log(b); // []
console.log(c); // undefined
// 4、如果没有一一对应的情况下,扩展符在中间,就会出错 `let [a,...b,d,c]=[1];`这种情况也一样
let [a,...b,c]=[1];
// Uncaught SyntaxError: Rest element must be last element


如果解构不成功,变量的值就等于undefined。在第4种情况中,我们把...b的位置放在中间,就会出错,而放在末尾只是打印空数组。


我们再举几个实际用到的例子,比如说交换值。以前交换值必须再声明定义一个变量,就像这样。


var a = 10;
var b = 20;
var temp = a;
a = b;
b = temp;


看起来,比较绕而且代码长,现在我们使用了es6的解构,可以这样。


let a = 10;
let b = 20;
[a,b] = [b,a];


2、不完全结构


接下来,我们来看下一个特殊的例子,叫做不完全解构。就是等号左边的模式,只匹配一部分的等号右边的数组


let [x, y] = [1, 2, 3];
x // 1
y // 2
let [a, [b], d] = [1, [2, 3], 4];
a // 1
b // 2
d // 4


3、默认值


let [x, y = 'b'] = ['a', 'c'];
    console.log(y) // 'c'
    let [x, y = 'b'] = ['a'];
    console.log(y) // 'b'
    let [x, y = 'b'] = ['a', undefined];
    console.log(y) // 'b'


总结:数组的元素是按次序排列的,变量的取值由它的位置决定。


二、对象的解构赋值


解构不仅可以用于数组,而且还可以用于对象。就像这样。


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


对象的属性没有次序,变量必须与属性同名,才能取到正确的值。


否则会弹出 undefined


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


如果非得输出c的话,必须写成这样:


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


这里模式匹配的是b,真正被赋值的是变量是c


这里我们讲一下一个实用的例子,就是将现有对象的方法,赋值到某个变量。


// 数学对象中的几个方法
let { log, sin, cos } = Math;
// 这里必须是log。不能是log1或者其他的变量,因为log是console的一个方法。
const { log } = console;
log('hello') // hello


再讲一个例子。


// 获取到的数据
let jsonData = {
id: 1,
status: "OK",
data: [1, 2]
};
let { id, status, data: number } = jsonData;
console.log(id, status, data); // 1,“OK”,[1,2]


对象的解构也可以指定默认值。


var {x: y = 3} = {x: 5};
console.log(y) // 5
var {x: y = 3} = {};
console.log(y) // 3


三、字符串的解构赋值


const [a, b, c, d, e] = 'hello';
console.log(a); // "h"
console.log(b); // "e"
let {length : x} = 'hello'; // 我们可以使用字符串自带的length属性,来获取值。
console.log(x) // 5


结语:


最后,我们根据数组跟对象自身的特性讲一下两个实用的例子:


1、


// 返回数组
function example() {
  return [1, 2, 3];
}
let [a, b, c] = example();
// 返回对象
function example() {
  return {
    foo: 1,
    bar: 2
  };
}
let { foo, bar } = example();


2、


// 参数是一组有次序的值,利用数组的解构赋值。
function f([x, y, z]) { ... }
f([1, 2, 3]);
// 参数是一组无次序的值,利用对象的解构赋值。
function f({x, y, z}) { ... }
f({z: 3, y: 2, x: 1});



相关文章
ES6学习(2)解构赋值
ES6学习(2)解构赋值
|
2月前
|
JavaScript 前端开发
解构赋值及其原理
解构赋值及其原理
18 0
|
4月前
|
JavaScript 前端开发 开发者
JavaScript进阶-解构赋值与展开运算符
【6月更文挑战第19天】ES6的解构赋值与展开运算符增强了JS开发效率。解构允许直接从数组或对象提取值,简化数据提取,而展开运算符则用于合并数组和对象或作为函数参数。解构时注意设置默认值以处理不存在的属性,避免过度嵌套。展开运算符需区分数组与对象使用,勿混淆于剩余参数。通过示例展示了这两种操作在数组和对象中的应用,提升代码可读性与简洁度。
136 5
|
5月前
|
移动开发 前端开发 JavaScript
web前端之ES6的实用深度解构赋值方法、复杂的解构赋值
web前端之ES6的实用深度解构赋值方法、复杂的解构赋值
61 1
|
5月前
|
JavaScript 前端开发
JavaScript开发中ES6+新特性:使用解构赋值的好处是什么?
JavaScript开发中ES6+新特性:使用解构赋值的好处是什么?
82 2
|
11月前
|
JSON 数据格式
ES6系列笔记-解构赋值
ES6系列笔记-解构赋值
63 1
|
11月前
|
存储 Rust 程序员
Rust 基础入门 —— 变量绑定与解构
首先讨论的第一点,就是对于传统的开发者来说明:为什么要去用 这样手动设定的方式设定变量的可行性。
78 0
|
10月前
ES6学习(二)—变量的解构赋值
ES6学习(二)—变量的解构赋值
|
JSON JavaScript 前端开发
ES6解构赋值有这一篇就够了
ES6解构赋值有这一篇就够了
ES6 从入门到精通 # 07:解构赋值
ES6 从入门到精通 # 07:解构赋值
82 0
ES6 从入门到精通 # 07:解构赋值
下一篇
无影云桌面