精华内容
下载资源
问答
  • ES6终于出现了解构赋值的语法糖来解决此类问题。 解构赋值是一种表达式,允许您使用数组或对象,将可迭代对象的值或属性分配给变量。解构赋值能让我们用更简短的语法进行多个变量的赋值,大大的减少了代码量。解构...
  • 主要介绍了ES6数组与对象的解构赋值,结合实例形式详细分析了ES6中数组与对象的解构赋值原理、用法及相关操作注意事项,需要的朋友可以参考下
  • js代码-去重:Set 对象 + 解构赋值
  • 解构赋值

    2020-10-19 18:08:58
    文章目录解构赋值一. 数组的结构赋值1. 理解解构赋值注意:2. 不成功的解构赋值3. 不完全解构4. 如果模式不匹配,那么会报错5. 默认值5.1 如果默认值是一个表达式5.2 默认值可以引用解构赋值的其他变量,6. 利用解构...

    解构赋值

    一看到赋值,你应该第一反应是给变量赋值,所以解构赋值与变量有关,所以也叫变量的解构赋值,简称解构赋值

    解构赋值:ES6 允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构

    一. 数组的结构赋值

    1. 理解解构赋值

    在ES 5中,我们想定义多个变量,同时这些变量赋值我们可以多次声明,也可以一次声明

    // 多次声明
    var a = 12;
    var b = 5;
    var c = 6;
    
    // 一次声明过个变量
    var a = 12,
    	b = 5,
    	c = 6;
    

    在ES 6中,我们也可以采用一次声明多个变量

    let a = 12,
    	b = 5,
    	c = 6;
    console.log(a,b,b);
    

    解构赋值

    let [a,b,c] = [12,5,6];  //右边是你的数据,左边是你的解构
    console.log(a,b,c);    // 12,5,6
    

    这就是解构赋值.

    本质上,这种写法属于“模式匹配”,只要等号两边的模式相同,左边的变量就会被赋予对应的值。

    注意:

    1. 左右两边,结构格式要保持一致

    比如:

    let [a,b,c] = [12,[5,6]];  //右边是你的数据,左边是你的解构
    console.log(a,b,c);   // 12, [5,6], undefined
    
    
    //如果希望数据对应,则需要结构一样
    let [a,[b,c]] = [12,[5,6]];
    console.log(a,b,c);   //12 5 6
    
    let [foo, [[bar], baz]] = [1, [[2], 3]];
    foo // 1
    bar // 2
    baz // 3
    
    let [ , , third] = ["foo", "bar", "baz"];
    third // "baz"
    
    let [x, , y] = [1, 2, 3];
    x // 1
    y // 3
    
    

    2. 不成功的解构赋值

    如果解构不成功,变量的值就等于undefined

    let [foo] = [];
    let [bar, foo] = [1];
    //foo 都是undefined
    

    3. 不完全解构

    另一种情况是不完全解构,即等号左边的模式,只匹配一部分的等号右边的数组。这种情况下,解构依然可以成功。

    let [x, y] = [1, 2, 3];
    x // 1
    y // 2
    
    let [a, [b], d] = [1, [2, 3], 4];
    a // 1
    b // 2
    d // 4
    
    //上面两个例子,都属于不完全解构,但是可以成功。
    

    简单理解,就是要被赋值的值数量多于接收值变量的数量

    4. 如果模式不匹配,那么会报错

    // 报错
    let [foo] = 1;
    let [foo] = false;
    let [foo] = NaN;
    let [foo] = undefined;
    let [foo] = null;
    let [foo] = {};
    

    5. 默认值

    如果定义的变量比较多,而又没有给这个变量赋值,那么这个变量就是undefined,但是有的时候我们不希望他是undefined,我们希望他是一个值

    解构赋值允许指定默认值。

    正常靠谱的后台都会给值,但是就怕不靠谱的后台,怎么办,所有我想要定义一个默认值,后台有用后台的值,没有,用默认值,

    let [a,b,c = "暂无数据"] = ["aa","bb"];  
    console.log(a,b,c);    //aa bb 暂无数据
    
    // 如果有值,就使用后台的值
    let [a,b,c = "暂无数据"] = ["aa","bb","cc"];  
    console.log(a,b,c);    // aa bb cc
    
    // 如果后台穿过来的是undefined,还是表示没有值,用默认值,
    let [a,b,c = "暂无数据"] = ["aa","bb",undefined];  
    console.log(a,b,c);    //aa bb 暂无数据
    
    // 如果后台传过来的是一个null,表示有值,null表示一个空对象
    let [a,b,c = "暂无数据"] = ["aa","bb",null];  
    console.log(a,b,c);    //aa bb null
    

    只有值为undefined的时候才使用默认值

    5.1 如果默认值是一个表达式

    如果默认值是一个表达式,那么这个表达式是惰性求值的,即只有在被解构的数据是undefied的时候才会求值

    function f() {
      console.log('aaa');
    }
    
    let [x = f()] = [1];
    console.log(x) // 1
    
    /=============================/
    
    function f() {
      console.log('aaa');
    }
    
    let [x = f()] = [undefined];
    console.log(x) // aaa, undefined
    
    
    5.2 默认值可以引用解构赋值的其他变量,

    前提是该变量必须是已经声明的

    let [x = 1, y = x] = [];     // x=1; y=1
    let [x = 1, y = x] = [2];    // x=2; y=2
    let [x = 1, y = x] = [1, 2]; // x=1; y=2
    let [x = y, y = 1] = [];     // ReferenceError
    //上面最后一个表达式之所以会报错,是因为x用到默认值y时,y还没有声明
    

    6. 利用解构赋值交换两个值

    交换两个值的位置

    let a = 12;
    let b = 5;
    [a,b] = [b,a];
    console.log(a,b);  //5 12
    // 这里利用数组有序的特性和解构赋值的方式,交互两个数
    

    二. 对象的结构赋值

    1. 对象解构赋值

    解构不仅可以用于数组,还可以用于对象。

    let json = {
        name: "doudou",
        age: 18,
        sex: "男"
    }
    let {name,age,sex} = json;
    console.log(name,age,sex);  // doudou18 男
    

    2. 对象解构赋值属性名必须相同

    对象的解构与数组有一个重要的不同。数组的元素是按次序排列的,变量的取值由它的位置决定;而对象的属性没有次序,变量必须与属性同名,才能取到正确的值。

    // 这里解构的属性名必须和对象的属性名相同,否则解不出来就全是undefined
    
    let {nam,ag,se} = json;
    console.log(nam,ag,se);  // undefined undefined undefined
    

    3. 自定义变量名与属性名不同

    // 如果想自己定义更改属性名可以如下操作
    
    let {name:nam,age:ag,sex:se} = json; // 这样依然可以改属性名,并打印了解构的值
    console.log(nam,ag,se);  //wuwei 18 男
    

    也就是说,对象的解构赋值的内部机制,是先找到同名属性,然后再赋给对应的变量。真正被赋值的是后者,而不是前者。

    实际上说明,对象的解构赋值是下面形式的简写

    let {name:name,age:age,sex:sex} = json; // 这样依然可以改属性名,并打印了解构的值
    console.log(nam,ag,se);  //wuwei 18 男
    

    4. 解构可以用于嵌套结构

    let obj = {
      p: [
        'Hello',
        { y: 'World' }
      ]
    };
    
    let { p: [x, { y }] } = obj;
    x // "Hello"
    y // "World"
    

    5. 对象的解构赋值也可以指定默认值

    var {x = 3} = {};
    x // 3
    
    var {x, y = 5} = {x: 1};
    x // 1
    y // 5
    
    var {x: y = 3} = {};
    y // 3
    
    var {x: y = 3} = {x: 5};
    y // 5
    
    var { message: msg = 'Something went wrong' } = {};
    msg // "Something went wrong"
    

    默认值生效的条件是,对象的属性值严格等于undefined

    var {x = 3} = {x: undefined};
    x // 3
    
    var {x = 3} = {x: null};
    x // null
    

    6. 数组也可以按照对象的方式解构

    由于数组本质是特殊的对象,因此可以对数组进行对象属性的解构。

    let arr = [1, 2, 3];
    let {0 : first, [arr.length - 1] : last} = arr;
    first // 1
    last // 3
    

    7. 注意点:

    let {a} = {a : "apple"};
    console.log(a);  //apple
    
    // 这么写没什么问题
    
    // 但是有人喜欢先定义,先定义一个变量a,在去解构
    let a; 
    {a} = {a : "apple"};
    console.log(a);  //报错
    //Uncaught SyntaxError: Unexpected token =
    // 你会发现报语法所处,因为 {a}是不是有块级作用域啊,=赋值就是有问题的
    
    // 我们可以加括变成表达式
    let a; 
    ({a} = {a : "apple"});
    console.log(a);  //apple
    
    // 发现这么写没任何问题,但是这么写的意义在哪里了,所有强烈不建议这么写
    

    因为这个花括号被当成解构,一旦用不好,就会被当成块作用域

    例子:

    function getPos(){
    	//....
        return {
    		left:10,
            bottom:20
    	}
    }
    let {left,bottom} = getPos();
    console.log(left,bottom);  // 10, 20
    
    // 这里不敢用top,因为全局的top会被当成window对象.所以这个时候就取名就显得格外重要
    
    function getPos(){
    	//....
        return {
    		left:10,
            top:20
    	}
    }
    let {left,top:t} = getPos();
    console.log(left,t); //10 20
    // 如果使用使用top,这里在全局环境下可以使用解构自己定义名字的方式
    

    三. 字符串的解构赋值

    const [a, b, c, d, e] = 'hello';
    a // "h"
    b // "e"
    c // "l"
    d // "l"
    e // "o"
    

    字符串也可以看做是类数组,因为有length属性

    类似数组的对象都有一个length属性,因此还可以对这个属性解构赋值。

    let {length : len} = 'hello';
    len // 5
    

    说明类数组可以按照正常的数组和对象方式解构

    四.函数参数的解构赋值:

    1. 函数参数的解构

    function add([a,b]){
      return a+b;
    }
    add([2,3])//5
    
    function fn({a,b}){
    	console.log(a,b); //1 2
    }
    fn({
    	a: 1,
        b: 2
    })
    
    

    2. 函数参数解构的默认值

    函数参数的解构也可以使用默认值。

    function move({x = 0, y = 0} = {}) {
      return [x, y];
    }
    
    move({x: 3, y: 8}); // [3, 8]
    move({x: 3}); // [3, 0]
    move({}); // [0, 0]
    move(); // [0, 0]
    

    3. 参数默认值的注意事项

    function move({x, y} = { x: 0, y: 0 }) {
      return [x, y];
    }
    
    move({x: 3, y: 8}); // [3, 8]
    move({x: 3}); // [3, undefined]
    move({}); // [undefined, undefined]
    move(); // [0, 0]
    

    上面代码是为函数move的参数指定默认值,而不是为变量xy指定默认值,所以会得到与前一种写法不同的结果。

    五. 数值和布尔值的解构赋值

    解构赋值时,如果等号右边是数值和布尔值,则会先转为对象。

    let {toString: s} = 123;
    s === Number.prototype.toString // true
    
    let {toString: s} = true;
    s === Boolean.prototype.toString // true
    
    展开全文
  • 本文实例讲述了ES6知识点整理之对象解构赋值应用。分享给大家供大家参考,具体如下: ES6 允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构(Destructuring), 在对象的解构赋值中有一些需要...
  • ES6解构赋值实例详解

    2020-08-28 23:41:24
    主要介绍了ES6解构赋值,结合实例形式较为详细的分析了ES6结构赋值的基本概念、原理与使用方法,需要的朋友可以参考下
  • 解构赋值允许你使用类似数组或对象字面量的语法将数组和对象的属性赋给各种变量。这篇文章主要介绍了ES6的解构赋值的实例代码 ,需要的朋友可以参考下
  • 本文实例讲述了ES6解构赋值的功能与用途。分享给大家供大家参考,具体如下: (1)交换变量的值 [x, y] = [y, x]; 上面代码交换变量x和y的值,这样的写法不仅简洁,而且易读,语义非常清晰。 (2)从函数返回多个...
  • 解构赋值 什么是解构赋值:按照一定的模式从数组或者对象中提取值,然后对变量进行赋值,这被称为解构赋值。 数组解构赋值 基本用法 下标对下标。 let [a,b,c]=[1,2,3]; let [a,[[b],c]=[1,[[2],3]]; 结果: 同时...

    解构赋值

    什么是解构赋值:按照一定的模式从数组或者对象中提取值,然后对变量进行赋值,这被称为解构赋值。

    数组解构赋值

    基本用法

    下标对下标。

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

    结果: 同时声明三个变量a,b和c,a拿到值1, b拿到值2,c拿到值3。这种写法属于"模式匹配",只要模式相同左边的变量就会被赋予相对应的值。

    let [,,third] = ["foo","bar","baz"]   //third="baz"(解构部分)
    let [a,,b] = [1,2,3]   //a=1,b=3(解构部分)
    let [x,y] = [1,2,3]   //x=1,y=2(不完全解构)
    

    但是如果解构不成功变量的值就等于undefined

    let [a,b,...c] = ["1"]   //a=1,b=undefined,c=[]
    

    如果等号右边不是数组(或是可遍历的结构)就会报错。

    默认值

    数组的解构赋值允许指定默认值

    let [a = 1] = []; //a = 1
    

    注意:

    1. 如果一个数组成员不严格等于undefined,默认值是不会生效的。

    2. 注意null!== undefined,当数组成员等于null时,默认值是不会生效的。

    3. 默认值也可以引用解构赋值的其他变量,但是该变量必须已经声明。

    对象解构赋值

    基本用法

    属性名对属性名。

    let { foo:foo ,bar:bar } = { foo:"aaa",bar:"bbb" };
    //foo="aaa",bar="bbb"
    

    对象的解构赋值和数组有一个重要的不同。数组的元素是按次序排列的,变量的取值是由他的下标决定的;而对象的属性没有次序,变量必须与属性同名才能取到正确的值。

    简写(语法糖):

    通常原对象中的属性名起的挺好,简洁又见名知意,所以没必要再另外起一个变量名,所以:

    let { foo:foo,bar:bar } = { foo:"aaa",bar:"bbb"};

    ​ 可简写为:

    let { foo,bar } = { foo:"aaa",bar:"bbb"};

    一个名两个用途:既当做配对的属性名,又当做将来单独使用的变量名

    注意:

    1. 等号左边要把变量装扮成和要解构的数组或者对象相同的结构

    2. 于数组一样,对象解构赋值也可以用于嵌套的解构的对象

    3. 看对象解构面试题时,一定要先把简写写成最开始的写法看清楚谁是模式谁是变量再进行判断

    //如果属性名不一样,必须写成如下例子中一样
    let { foo:baz } = { foo:"aaa",bar:"bbb"};
    //baz="aaa",实际上被赋值的是foo属性的baz变量
    

    默认值

    对象的解构赋值也允许指定默认值

    var {x = 3} = {};
    x // 3
    
    var {x, y = 5} = {x: 1};
    x // 1
    y // 5
    
    var {x: y = 3} = {};
    y // 3
    
    var {x: y = 3} = {x: 5};
    y // 5
    
    var { message: msg = 'Something went wrong' } = {};
    msg // "Something went wrong"
    

    注意

    1. 默认值生效的条件是,对象的属性值严格等于undefined
    2. 注意null不严格等于undefined会使默认值不生效
    3. 解构失败,变量的值等于undefined

    字符串解构赋值

    字符串也可以解构赋值,这是因为此时字符串被转换成了一个类数组对象。

    const [a,b,c,d,e] = "hello"
    //a="h",b="e",c="l",d="l",e="o"
    let {length:len} = "hello";
    //len=5
    

    数值和布尔值的解构赋值

    解构赋值时,如果等号右边是数值和布尔值,则会先转为对象。

    let {toString: s} = 123;
    s === Number.prototype.toString // true
    
    let {toString: s} = true;
    s === Boolean.prototype.toString // true
    

    上面代码中,数值和布尔值的包装对象都有toString属性,因此变量s都能取到值。

    解构赋值的规则是,只要等号右边的值不是对象或数组,就先将其转为对象。

    由于undefinednull无法转为对象,所以对它们进行解构赋值,都会报错。

    由上的代码可以看出,左边写成let {toString: s} = 123;是可以把Number.prototype.toString方法的地址值复制一份出来给左边对象结构中的s,那么以后我们想调用别的父类型(原型对象)上的方法也是不是可以这样做?

    eg:查看一个数据是什么类型的:

    let { toString:objToString } = {};
    objToString.call(1) === "[object Number]"  //true
    objToString.call("") === "[object String]"  //true
    objToString.call([]) === "[object Array]"  //true
    

    可以看到我从{}.toString处拿到了Object顶级父对象toString的地址值然后解构赋值给了objToString找到了这个方法是可行的。

    函数参数解构赋值

    以数组或对象形式传递多个参数,调用时,所有实参值必须也放在一个数组或对象中传入。

    function fun([a,b]){
        console.log(a+b)
    }
    fun([1,2]);//3
    
    function fun({a:a,b:b}){
        console.log(a+b)
    }
    fun({a:1,b:2});//3
    

    简写: 语法糖: 如果形参名与属性名没必要区分,是相同的名字,也可以只写一个。

    function fun({a,b}){
        console.log(a+b)
    }
    fun({a:1,b:2});//3
    

    函数参数的定义和函数参数的默认值

    当一个函数内需要多个参数,但调用时不能确定参数有没有,而又要求参数值与函数内变量有对应关系这时就要用到参数解构;指定参数的默认值,就避免了在函数体内部再写var foo = config.foo || 'default foo';这样的语句。

    function order(
    {zhushi: zs = "香辣鸡腿堡",xiaochi: xc = "薯条薯条",yinliao: yl = "可口可乐"}={})
    {
      console.log(`您本次点的是:
      主食:${zs},
      小吃:${xc},
      饮料:${yl}
    `)
    }
    order()
    

    在这里插入图片描述

    实际应用

    1 交换变量的值

    let x = 1;
    let y = 2;
    
    [x, y] = [y, x];
    

    2 函数返回值

    函数只能返回一个值,如果要返回多个值,只能将它们放在数组或对象里返回,然后用解构取值。

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

    3 提取JSON数据

    let jsonData = {
      id: 42,
      status: "OK",
      data: [867, 5309]
    };
    
    let { id, status, data: number } = jsonData;
    
    console.log(id, status, number);
    // 42, "OK", [867, 5309]
    

    4 输入模块的指定方法

    加载模块时,往往需要指定输入哪些方法。解构赋值使得输入语句非常清晰。

    import { queryMicroInfoShopPost } from "@/api/sysmgr"
    

    ps: 学习阮一峰 ES6入门 个人理解心得总结(2)-解构赋值 个人理解难免有错误,欢迎大家指正

    展开全文
  • 主要介绍了ES6中let、const的区别及变量的解构赋值操作方法,结合实例形式分析了ES6中let、const的功能、原理、使用方法及数组、字符串、函数参数等解构赋值相关操作技巧,需要的朋友可以参考下
  • 分别给大家介绍了关于es6中解构赋值、扩展运算符和rest参数使用的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
  • 解构赋值 有如下 config 对象 const config = { host: 'localhost', port: 80 } 要获取其中的 host 属性 let { host } = config 拆分成模块 以上两段代码,放到同一个文件当中不会有什么问题,但在一个项目...
  • ES6 数组对象解构赋值 其他类型的解构赋值

    数组解构赋值

    1.解构赋值的定义

    解析某一数据的结构,将想要的东西提取出来,赋值给变量或常量。

    const arr = [1, 2, 3];
    // const a=arr[0];
    // const b=arr[1];
    // const c=arr[2];
    const [a, b, c] = [1, 2, 3];
    console.log(a, b, c); //1 2 3
    
    // 模式(结构)匹配,索引值相对应
    let [a,b,c]=[1,2,3];
    
    // 如果想要取出1,5,3
    const [d,[,,e],f]=[1,[2,4,5],3];
    console.log(d,e,f); //1 5 3
    

    2.解构赋值的默认值

    只有当一个数组成员严格等于(===) undefined时,它的的默认值才会生生效。如果默认值是表达式时,默认值表达式是惰性求值的。

    const [a, b] = []; //a=undefined,b=undefined
    const [c = 1, d = 2] = []; //1 2
    
    //只有当一个数组成员严格等于(===) undefined时,对应的默认值才会生生效。
    const [e = 1, f = 2] = [3, 4] //3,4
    const [i = 2, j = 6] = [5] //5 6
    console.log(a, b, c, d, e, f, i, j); //undefined undefined 1 2 3 4 5 6
    
    // 如果默认值是表达式时,默认值表达式是惰性求值的
    const func = () => {
        console.log("我被执行了")
        return 2;
    };
    const [x = func()] = [1]; // 此时函数func并没有执行
    const [y=func()]=[];
    console.log(x,y); //1 2 
    

    3.解构赋值的应用

    类数组可以进行解构赋值

    // 1.常见的类数组的解构赋值
    // arguments
    function func(){
        const [a,b]=arguments;
        console.log(a,b); //1 2
    }
    func(1,2); 
    
    // NodeList
    console.log(document.querySelectorAll('p')); //NodeList(3) [p, p, p]
    const [p1,p2,p3]=(document.querySelectorAll("p"));
    console.log(p1,p2,p3);
    

    函数参数的解构赋值

    const array=[1,2];
    // 不用解构赋值参数的写法如下
    // const add=arr=>arr[0]+arr[1];
    // 使用解构赋值
    const add=([x,y])=>x+y;
    console.log(add(array)); //3 
    
    //还可以给形参添加默认值
    const add1=([x=1,y=3])=>x+y;
    console.log(add1([])); //4
    

    交换变量的值

    let x=1 ,y=2;
    //相当于[x,y] =[2,1],而不是右边的y赋值给x,x赋值给y
    [x,y]=[y,x];
    console.log(x,y); //2 1
    

    对象解构赋值

    1.模式匹配,属性名相同的完成赋值,不需要按照顺序

    // 1.模式匹配,属性名相同的完成赋值,不需要按照顺序
    //简写形式
    const {age,name}={name:"alex",age:18};
    console.log(age,name); //18 "alex"
    // 完整形式
    const {age:age1,name:name1}={name:"alex",age:18};
    console.log(name1,age1); //alex 18
    

    2.对象解构赋值的注意事项

    // 1.默认值的生效条件
    // 对象的数值值严格等于undefined时,对应的默认值才会生效
    const {name } = { name: "alex"};
    console.log(name); //"alex"
    // 注意默认值的赋值是用等号,而不是用冒号
    const {name1="billie",age=0}={};
    console.log(name1);
    // 2.如果默认值是表达式,默认值表达式是惰性求值的
    
    // 3.将一个已经声明的变量用于解构赋值
    let x=1;
    // {x}={x:3}; 会报错,和解决箭头函数的单行语句的返回值是对象一样,在整个外层加上括号
    ({x}={x:3});
    console.log(x); //3
    
    // 4.可以取到继承的属性
    const {toString}={};
    console.log(toString);// 并没有输出undefined
    // toString的属性继承自Object
    console.log(Object.prototype);
    const {a}={};
    console.log(a); //undefined
    

    3.对象解构赋值的应用

    // 函数参数的解构赋值
    //const info=user=>console.log(user.name,user.age);
    const info=({age,name})=>console.log(age,name);
    info({name:"hh",age:12});
    

    其他数组类型的解构赋值

    1.字符串的解构赋值

    //数组形式的解构赋值
    const [a,b,,,c]="hello";
    console.log(a,b,c); //h e o
    // 对象形式解构赋值
    const {0:x,1:y,length}="hello";
    console.log(x,y,length); //h e 5
    

    2.数值和布尔值的解构赋值(只能按照对象形式解构赋值), 会自动将右侧的数值或布尔值转换为对象

    const {aa,toString}=123;
    console.log(aa,toString); //toString属性是继承而来的
    

    3.undefined和null的解构赋值会报错

    // 由于undefined和null,无法转化为对象,所以对它们进行解构赋值都会报错
    const {ff}=undefined;
    console.log(ff); //报错
    

    总结

    image-20210603194723759

    image-20210603194752249

    image-20210603194903992

    image-20210603195036092

    展开全文
  • js代码-解构赋值省略掉部分参数
  • 对象解构 let {a1,b2} = {a1:.., b2:...} let Menu ={title:'番茄炒蛋',price:12,} let {title , price} = Menu console.log(title);//番茄炒蛋 console.log(price);//12 若把一个属性赋值给另一个名字的变量,...

    对象解构

    let {a1,b2} = {a1:.., b2:...}

    let Menu ={title:'番茄炒蛋',price:12,}
    let {title , price}  = Menu
    console.log(title);//番茄炒蛋
    console.log(price);//12
    
    • 若把一个属性赋值给另一个名字的变量,比如把 options.width 属性赋值给变量 w,那么可以使用冒号来指定
    • 冒号表示“什么值:赋值给谁”。
    let Menu ={title:'番茄炒蛋',price:12,}
    let {title:t , price:p}  = Menu
    console.log(t);//番茄炒蛋
    console.log(p);//12
    
    • 对于可能缺失的属性,可以使用**=**设置默认值
    let Menu ={title:'番茄炒蛋',price:12,}
    let {title:t , price:p,star=5}  = Menu
    console.log(t);//番茄炒蛋
    console.log(p);//12
    console.log(star); //5
    
    • ps:具有很多属性的复杂对象,只需提取所需的内容

    剩余模式…

    let Menu ={title:'番茄炒蛋',price:12,name:'搜搜'}
    let {title:t,..other}  = Menu
    console.log(other)//{ price: 12, name: '搜搜' }
    

    嵌套解构

    -若是一个对象或者数组嵌套了其他的对象和数组,就需要在等号左侧使用复杂的模式来提取所需数据

    let prices = {
        banana: 1,
        orange: 2,
        meat: {
            a: 'qw',
            b: 'as'
        },
    };
    
    let { banana, meat: {
        a, b
    } } = prices
    console.log(b);//as
    
    展开全文
  • ES6之解构赋值

    2021-01-08 16:05:19
    解构赋值概念数组的解构赋值对象的解构赋值函数参数的解构赋值用途 概念 解构赋值语法是一种 Javascript 表达式。通过解构赋值, 可以将属性/值从对象/数组中取出,赋值给其他变量。 换句话说也就是ES6 允许按照一定...
  • JS中的解构赋值的详解与具体用途

    千次阅读 2021-03-16 13:21:40
    解构赋值 什么是解构赋值解构赋值:ES6允许按照一定的模式从数组和对象中取值,然后进行对变量进行赋值,这被称为解构赋值解构赋值的分类: 一、数组解构赋值 简单的数组的解构 //例1: { let a,b; [a,b]=[1...
  • 解构赋值原理

    2020-07-28 10:21:40
    ES6变量的解构赋值本质上是“模式匹配”,只要等号两边的模式相同,左边的变量就会被赋予匹配的右边的值,如果匹配不成功变量的值就等于undefined ES6中只要某种数据有Iterator接口(也就是可以循环迭代 Iterable...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 33,865
精华内容 13,546
关键字:

解构赋值