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

1|0结构赋值

1|1变量声明并赋值时的解构

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

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

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

1|3交换两个变量的值

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

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

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

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

1|5从函数返回多个值

//返回一个数组 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

1|6 忽略某些返回值

function f() { return [1, 2, 3]; } var [a, , b] = f(); console.log(a); // 1 console.log(b); // 3

1|7函数参数

//参数是一组有次序的值 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

1|8JSON数据

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]

2|0JavaScript展开语法

关键字是:... 

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

示例:

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

1|0合并数组

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];

1|0数组拷贝 (copy)

var arr = [1, 2, 3]; var arr2 = [...arr]; arr2.push(4); // arr2 此时变成 [1, 2, 3, 4] // arr 不受影响

1|0函数传参

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

1|0对象

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 }

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


__EOF__

本文作者长安
本文链接https://www.cnblogs.com/jingxin01/p/16390349.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   长安·念  阅读(239)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示