js ES6-解构赋值、延展操作符/扩展运算符

版权声明:作者:shenroom 来源:CSDN 版权声明:本文为博主原创文章,转载请附上博文链接! https://blog.csdn.net/qq_41772754/article/details/88086876

解构赋值

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

1.解构赋值:基本用法、解构重命名、解构默认值

基本用法:字符串,数组,对象都可以进行解构赋值,下面是数组的解构
    let json = ["张三", 20, "男"]    
    let [name,age,sex] = json;
    console.log(name,age,sex);      //  张三 20 男
       //注意:等号前面的解构变量不能有引号,它是一个变量,不是字符串,如:let ["name","age","sex"] = ["张三", 20, "男"];  这样写是错误的。
       //可以修改解构变量的值:
    name="李四"             //上面的"张三"就改为"李四"了

----------------------------------------------------
解构重命名:可以对数据对象的key值,进行重命名
    let json = {
        name:"张三",
        age:20,
        sex:"男"
    }
    let { name,age:a,sex:b } = json;
    console.log(name,a,b);      //  张三 20 男

----------------------------------------------------
解构默认值:可以对没有解构到的变量赋默认值
    let json = ["张三", 20, "男"]    
    let [name,age,sex,love="运动"] = json;
    console.log(name,age,sex,love);      //  张三 20 男 运动

注意:这个地方有一点需要注意:如果带有默认值的的变量,解构到的数据是 null 时,他此时的值将不再是默认值,二是 null 。
如果解构到的值是 undefiend ,他此时的值任然是默认值。例如:

    let [name,age,sex,love="运动"] = ["张三", 20, "男",undefiend];
    console.log(name,age,sex,love);      //  张三 20 男 运动

    let [name,age,sex,love="运动"] = ["张三", 20, "男",null];
    console.log(name,age,sex,love);      //  张三 20 男 null

  交换两个数的位置

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

 2.对象解构赋值:

    //基本用法:
    let {name,age,sex} = {name:"张三", age:"20", sex:"男"} ;
    console.log(name);      //  张三
    console.log(age);       //  20
    console.log(sex);       //  男 

    //含有数组:
    let {name,age, sex, friend} = {name:"张三", age:"20", sex:"男", friend:["李四", "王五"]} ;
    console.log(name);      //  张三
    console.log(age);       //  20
    console.log(sex);       //  男 
    console.log(friend);    //  ["李四", "王五"]

    //含有对象:
    let {name,age, sex, friend, pet} = {name:"张三", age:"20", sex:"男", friend:["李四", "王五"], pet:{name:"旺财" ,age:"2"}} ;
    console.log(name);      //  张三
    console.log(age);       //  20
    console.log(sex);       //  男 
    console.log(friend);    //  ["李四", "王五"]
    console.log(pet);       //  {name:"旺财" ,age:"2"}
  //注意:对象的结构赋值,key值的顺序可以随便,但前后的key值名称一定要一一对应,不然就会出undefined,写。
    let {name:str} = {name:"张三"};
    console.log(name);      //  显示不出结果
    console.log(str);       //  张三
    //因此,不要用这种方式解构赋值,一定要按照key值对应解构;

关于对象,先定义变量后,再解构赋值问题解析 :如果{}前面没有变量声明符如let , 浏览器会直接将{ } 看成是一个块级作用域,会报语法错误。

先定义的变量,再解构赋值,这样写的话,会报错语法错误
let a;
{ a } = { a:"123", b:12}
----------------------------------------------------------
如果坚持要先定义变量再解构,需要这样写才不会出错,用()包起来
let a;
({ a } = { a:"123", b:12})

3.数组嵌套解构赋值:  

    let [arr1, [arr2, arr3, [arr4, arr5]]] = [1, [2, 3, [4, 5]]];
    concole.log(arr1,arr2,arr3,arr4,arr5)   //  1, 2, 3, 4, 5
  //注意:不管简单还是复杂的数组解构赋值,只要前后解构关系一样就都可以赋值成功

  //解构赋值没有找到时会返回undefiend
    let [arr] = [];
    console.log(arr)         // undefiend 

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

  //解构赋值是按照从左往右的顺序一一对应查找赋值的:
    let [a, , , c] = [1, 2, 3];
    console.log(a)          // 1
    console.log(c)          // undefined

4.基本类型的解构赋值:(开发中晕的比较少。了解即可) 

  //String类型有构造器的,可以解析。
    let [a, b, c, d, e] = "我是中国人";
    console.log(a)          // 我
    console.log(b)          // 是
    console.log(c)          // 中
    console.log(d)          // 国
    console.log(e)          // 人
  //Number类型是没有构造器的,无法解析。
    let [a, b, c, d, e] = 12306;
    console.log(a)          // 直接报错
    console.log(b)          // 直接报错
    console.log(c)          // 直接报错
    console.log(d)          // 直接报错
    console.log(e)          // 直接报错

延展操作符/扩展运算符

语法是三个点:...  

扩展的作用:将数组展开
let arr = ["red","blue",green]
console.log(...arr)  // red blue green

-------------------------------------------------------
重置的作用:包装成数组,多用于函数传参
function show(...a){
    console.log(arguments) // 以前的用法 [1,2,3,4,5,6]
    console.log(a)  // [1,2,3,4,5,6]
}
show(1,2,3,4,5,6)

-------------------------------------------------------
剩余运算的作用:将剩余的参数包装成一个数组
function show(a,b,...c){
    console.log(a)  // 1
    console.log(b)  // 2
    console.log(c)  // [3,4,5,6]
}
show(1,2,3,4,5,6)
注意:包装剩余的参数一定要放在最后,不能放在其他文位置
function show(a,...b,c){
    // 浏览器会直接报错
}
show(1,2,3,4,5,6)

复制数组、对象:浅拷贝

let arr = [1,2,3,4];
//let arr2 = Array.from(arr) // 以前的用法
let arr2 = [...arr]
console.log(arr2)  // [1,2,3,4]


let arr = {name:"a",age:12};
let arr2 = {...arr}
console.log(arr2)  // {name:"a",age:12}

猜你喜欢

转载自blog.csdn.net/qq_41772754/article/details/88086876