JS--解构赋值&&展开语法

结构赋值

变量声明并赋值时的解构

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

变量先声明后赋值时的解构

   var b, c, d
    [b, c, d] = [1, 2, 3, 4]
    console.log(b);//1
    console.log(c);//2
    console.log(d);//3
//可以先给声明的变量赋值   防止解构的值为undefined
    var b, c, d
    [b, c=6, d=8] = [1]
    console.log(b);//1
    console.log(c);//6
    console.log(d);//8
//如果不给c&&d赋值的话解构出来的值为undefined

交换两个变量的值

let x = 1;
let y = 2;
[x,y] = [y,x]
console.log(x,y);//2  1

 将剩余数组赋值给一个变量

当解构一个数组时,可以使用剩余模式,将数组剩余部分赋值给一个变量。

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

从函数返回多个值

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

 忽略某些返回值

function f() {
  return [1, 2, 3];
}

var [a, , b] = f();
console.log(a); // 1
console.log(b); // 3

函数参数

//参数是一组有次序的值
function f([x,y,z]){
    console.log(x,y,z);
}
f([1,2,3]);  //1,2,3
//参数是一组无次序的值
function func({x,y,z}){
    console.log(x,y,z);
}
func({z:3,y:2,x:1}); //1,2,3

JSON数据

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

JavaScript展开语法

关键字是:... 

可以在函数调用/数组构造时,将数组表达式或者 string 在语法层面展开;还可以在构造字面量对象时,将对象表达式按 key-value 的方式展开。(译者注: 字面量一般指 [1, 2, 3] 或者 {name: "mdn"} 这种简洁的构造方式)

示例:

var arr=[1,2,3,4,5]
 console.log(...arr);//1 2 3 4 5

合并数组

1.一般用concat进行

var arr1 = [0, 1, 2];
var arr2 = [3, 4, 5];
// 将 arr2 中所有元素附加到 arr1 后面并返回
var arr3 = arr1.concat(arr2);

2.用...合并数据

var arr1 = [0, 1, 2];
var arr2 = [3, 4, 5];
var arr3 = [...arr1, ...arr2];

数组拷贝 (copy)

var arr = [1, 2, 3];
var arr2 = [...arr]; 
arr2.push(4);

// arr2 此时变成 [1, 2, 3, 4]
// arr 不受影响

函数传参

function myFunction(x, y, z) { }
var args = [0, 1, 2];
myFunction(...args);

对象

  let obj={a:1,b:2}
    let obj1={...obj}
    console.log(obj1,'拷贝');//{a:1,b:2}
    obj1.a=3//修改拷贝值
    obj1.b=6//修改拷贝值
    console.log(obj,'原始');//{a:1,b:2}
    console.log(obj1,'修改拷贝');//{a:3,b:6}
    let obj2={...obj1,...obj}//合并
    let obj3={...obj,...obj1}//合并
    console.log(obj2,'合并的对象');
    console.log(obj3,'合并的对象');
    //合并时相同的属性变为同一个,然后后面的值会覆盖前面的值,合并顺序不同产生的合并对象的值也不同,
// 构造字面量对象时使用展开语法
var obj1 = { foo: 'bar', x: 42 };
var obj2 = { foo: 'baz', y: 13 };

var clonedObj = { ...obj1 };
// 克隆后的对象: { foo: "bar", x: 42 }

var mergedObj = { ...obj1, ...obj2 };
// 合并后的对象: { foo: "baz", x: 42, y: 13 }

//对象合并时相同的属性变为同一个,然后后面的值会覆盖前面的值,合并顺序不同产生的合并对象的值也不同

posted @ 2022-06-19 13:09  长安·念  阅读(263)  评论(0)    收藏  举报