美文网首页Web 前端开发 让前端飞
005_ES6知识点总结(02)变量的解构赋值

005_ES6知识点总结(02)变量的解构赋值

作者: maze1943 | 来源:发表于2020-02-20 09:38 被阅读0次

ES6知识点整理

[toc]

02 变量的解构赋值

02.1 数组的解构赋值

基本用法:

let [x, y = 1] = [10, 20];//x:10  y:20
let [x, y = 1] = [10];//x:10  y:1
let [, y] = [10, 20];//y:20
let [x, y] = [10];//x:10  y:undefined

上例中使用了默认值,若该位置对应的值不严格等于undefined,则会使用默认值
默认值也可以使用解构赋值的其他变量,前提是其已声明

let [x = 1, y = x] = [];//x:1  y:1
let [x = y, y = 1] = [];//ReferenceError

02.2 对象的结构赋值

对象的解构赋值与数组一点不同在于:数组的元素是有序的,变量的取值取决于位置;而对象需要寻找其属性同名的变量:

let {a, b} = {b:"Hello", a:"World"};
a//World
b//Hello

而当需要变量名与属性名不同名时,可以写成如下这样:

let {a:stringA, b:stringB} = {a:"Hello",b:"World"}
a//ReferenceError
b//ReferenceError
stringA//Hello
stringB//World

注意:
如果要将一个已经声明的变量用于解构赋值,可能会产生意想不到的错误:

let a;
{a} = {a:"Hello World"};//SynaxError

产生语法错误的原因是,{a}会被js引擎解释为一个代码块,正确的方法应该是不将大括号写在行首

let a;
({a} = {a:"Hello World"});//a:Hello World

另外,由于数组也是一种特殊的对象,因此数组也可以使用对象的解构赋值:

let arr = ["Hello", "My", "World"];
let {0:First, [arr.length - 1]:Last} = arr;
First//Hello
Last//World

02.3 字符串的解构赋值

let  [a,b,c] = "Hello";
a//H
b//e
c//l

//类似数组的对象都有一个length属性,下例中等于将"Hello"的length属性解构赋值给len
let {length : len} = "Hello";
len//5

02.4 数值和布尔值的解构赋值

如果使用布尔值或数值作为等号右边来解构赋值,则会先将其转换为对象,而如果是undefied或null,由于无法转换成对象,解构赋值则会报错。

02.5 函数参数的解构赋值

//例1
function add([x,y]){
    return x + y;
}
add([1,2]);//3

//例2
[[1,2],[3,4]].map(([a,b]) => a+b);//[3,7]

02.6 解构赋值的应用

02.6.1 交换变量的值

以前我们需要交换两个变量的值可能会采用以下的方法:

let a = 0, b = 1;
let temp;
temp = b;
b = a;
a = temp;
a//1
b//0

应用解构赋值后,代码可以更简洁:

let a = 0, b = 1;
[a,b] = [b,a];
a//1
b//0

02.6.2 从函数返回多个值

函数只能返回一个值,如果需要返回多个值,只能放在数组或对象中返回,使用解构赋值取出这些值就会非常方便

function someResults(){
    return{
        a:0,
        b:1,
        c:2
    }
}
let {a,b,c} = someResults();

02.6.3 函数参数

可以方便的将一组参数与变量对应起来,这种应用在各类js插件中很常见,比如需要设定一个options参数,用于设置插件的各项参数:

function someFunc({
    color = "red",
    width = "100",
    height = "100"
} = {
    color : "red",
    width : "100",
    height : "100"
}){
    console.log(color,width,height);
}

someFunc();//red,100,100
someFunc({});////red,100,100
someFunc({color:"orange",width:"200"});//orange,200,100

以上函数someFunc中,使用了对象的结构赋值及函数参数的默认值来设定options参数,未设定的参数将使用默认值

02.6.4 提取JSON数据

等同于对象的解构,JSON的数据提取可以非常简洁快速

let jsonData = {
    name : "Jelly",
    age : 20,
    account : ["622662266226","75577557757"]
}
let {name,age,account} = jsonData;

02.6.5 遍历Map结构

结合for...of循环遍历和变量的结构赋值,取出Map的键值非常方便

let map = new Map();
map.set('first','hello');
map.set('second','world');

for(let [key,value] of map){
    console.log(key + ' is ' +value);
}

02.6.6 输入模块的指定方法

加载模块的指定方法时:

const {SourceMapConsumer, SourceNode} = require("source-map");

相关文章

  • 005_ES6知识点总结(02)变量的解构赋值

    ES6知识点整理 [toc] 02 变量的解构赋值 02.1 数组的解构赋值 基本用法: 上例中使用了默认值,若该...

  • 解构赋值

    解构赋值:ES6 中新增了变量赋值的方式,从数组和对象中提取值,对变量进行赋值。 单独赋值给变量,解构赋值。 解构...

  • 2018-12-29-学习周报

    ES6深入认识02 结构赋值 数组的解构赋值 几种常见情况举例: 总结来看,大致分为四种: 解构成功 解构失败 不...

  • ES6笔记(解构赋值)

    ES6笔记(解构赋值) 解构赋值 变量的解构: 解构赋值允许指定默认值。 解构赋值必须保证赋值方 被赋值方类型一...

  • 变量的解构赋值

    数组的解构赋值: 解构,就是从数组和对象中提取值,然后对变量进行赋值 解构赋值: 解构不成功,变量的值就等于und...

  • (三)ES6第二节变量解构赋值

    本节知识点 数组的解构赋值 对象的解构赋值 字符串的解构赋值 数值和布尔值的解构赋值 函数参数的解构赋值 圆括号的...

  • ES6系列之变量的解构赋值

    本篇目录: 数组的解构赋值变量声明并赋值时的解构变量先声明后赋值时的解构不完全解构默认值交换变量解析一个从函数返回...

  • 解构赋值

    解构赋值 数组的解构赋值 嵌套,默认值,展开符 对象的解构赋值 对象解构赋值的本质与简写 对象解构的模式与变量 对...

  • 『ES6脚丫系列』变量的解构赋值

    『ES6脚丫系列』变量的解构赋值 第一章:变量的解构赋值的概念 【01】Q:什么是变量的解构赋值?有哪些方式? 吃...

  • ES6的解构赋值

    一、前言 什么是“解构赋值”呢?就是从数组或者对象中取值,对变量进行赋值,这就是变量的解构赋值。 二、数组的解构赋...

网友评论

    本文标题:005_ES6知识点总结(02)变量的解构赋值

    本文链接:https://www.haomeiwen.com/subject/jnmtqhtx.html