JavaScript中展开运算符及应用的实例代码


Posted in Javascript onJanuary 14, 2021

展开运算符(spread operator)允许一个表达式在某处展开。展开运算符在多个参数(用于函数调用)或多个元素(用于数组字面量)或者多个变量(用于解构赋值)的地方可以使用。

let obj1 = {
 value1: 1,
 value2: 2
};
let obj2 = {...obj1
};
console.log(obj2); // {value1: 1, value2: 2}

上面的用法实际相当于

obj2 = {value1: 1, value2: 2}

展开运算符的写法与obj2 = obj1直接赋值的写法的区别在于如果直接赋值的话,对于引用类型来说,相当于只是赋值了obj1的内存空间地址,当obj2发生改变的时候,obj1也会随着发生改变。而是用展开运算符写法的话,由于obj1对象中的属性类型都是基本类型,相当于重新创建了一个对象,此时obj2发生改变的时候,并不会影响obj1这个对象。但是仅限于其属性都为基本类型的情况(或者说只进行了一层的深拷贝)。如果该对象中的属性还有引用类型的话,修改属性中引用类型的值,则两个对象的属性值都会被修改。

let obj1 = {
 attri1: [3, 6, 0],
 attri2: 4,
 attri4: 5
};
let obj2 = {...obj1
};

obj2.attri2 = 888;
obj2.attri1[0] = 7;

console.log('obj1:', obj1);
console.log('obj2:', obj2);

展开运算符的应用

1.在函数中使用展开运算符

function test(a, b, c){};

let arr = [1, 2, 3];
test(...arr);

2.数组字面量中使用展开运算符

let arr1 = [1, 2];
let arr2 = [...arr1, 3, 4]; // [1, 2, 3, 4]

// 使用push方法
let arr1 = [1, 2];
let arr2 = [3. 4];
arr1.push(...arr2); // [1, 2, 3, 4]

3.用于解构赋值,解构赋值中展开运算符只能用在最后,否则会报错。

// 解构赋值中展开运算符只能用在最后。
let [a, b, ...c] = [1, ,2, 3, 4]
console.log(a, b, c) // 1, 2, [3, 4]

4.类数组变成数组

let oLis = document.getElementsByTagName("li");
let liArr = [...oLis];

5.对象中使用展开运算符
ES7中的对象展开运算符符可以让我们更快捷地操作对象:

let {x,y,...z}={x:1,y:2,a:3,b:4};
x; // 1
y; // 2
z; // {a:3,b:4}

将一个对象插入另外一个对象当中:

let z={a:3,b:4};
let n={x:1,y:2,...z};
console.log(n); //{x:1,y:2,a:3,b:4}

合并两个对象:

let a={x:1,y:2};
let b={z:3};
let ab={...a,...b};
console.log(ab); // {x:1,y:2,z:3}

到此这篇关于JavaScript中展开运算符及应用的实例代码的文章就介绍到这了,更多相关js展开运算符内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
Javascript !!的作用
Dec 04 Javascript
JavaScript的单例模式 (singleton in Javascript)
Jun 11 Javascript
JQuery跨Iframe选择实现代码
Aug 19 Javascript
为jQuery.Treeview添加右键菜单的实现代码
Oct 22 Javascript
jQuery.buildFragment使用方法及思路分析
Jan 07 Javascript
jQuery添加和删除指定标签的方法
Dec 16 Javascript
JavaScript动态创建div等元素实例讲解
Jan 06 Javascript
js实现页面跳转的几种方法小结
May 16 Javascript
基于JavaScript实现新增内容滚动播放效果附完整代码
Aug 24 Javascript
深入理解requireJS-实现一个简单的模块加载器
Jan 15 Javascript
Angular中使用better-scroll插件的方法
Mar 27 Javascript
vue 中 elment-ui table合并上下两行相同数据单元格
Dec 26 Javascript
js中延迟加载和预加载的具体使用
Jan 14 #Javascript
JS中箭头函数与this的写法和理解
Jan 14 #Javascript
JavaScript this关键字的深入详解
Jan 14 #Javascript
Vue实现多页签组件
Jan 14 #Vue.js
如何在vue中使用HTML 5 拖放API
Jan 14 #Vue.js
Vue中引入svg图标的两种方式
Jan 14 #Vue.js
vue+element table表格实现动态列筛选的示例代码
Jan 14 #Vue.js
You might like
一个完整的php文件上传类实例讲解
2015/10/27 PHP
非集成环境的php运行环境(Apache配置、Mysql)搭建安装图文教程
2016/04/12 PHP
Flash对联广告的关闭按钮讨论
2007/01/30 Javascript
js 获取Listbox选择的值的代码
2010/04/15 Javascript
JQuery触发事件例如click
2013/09/11 Javascript
javascript中setInterval的用法
2015/07/19 Javascript
Nodejs如何复制文件
2016/03/09 NodeJs
基于ajax与msmq技术的消息推送功能实现代码
2016/12/26 Javascript
分享bootstrap学习笔记心得(组件及其属性)
2017/01/11 Javascript
react 实现页面代码分割、按需加载的方法
2018/04/03 Javascript
mock.js实现模拟生成假数据功能示例
2019/01/15 Javascript
layui自定义ajax左侧三级菜单
2019/07/26 Javascript
如何基于原生javaScript生成带图片的二维码
2019/11/21 Javascript
vue中keep-alive、activated的探讨和使用详解
2020/07/26 Javascript
使用JavaScript实现贪吃蛇游戏
2020/09/29 Javascript
vue 实现click同时传入事件对象和自定义参数
2021/01/29 Vue.js
[47:46]完美世界DOTA2联赛 Magma vs GXR 第三场 11.07
2020/11/10 DOTA
Python生成验证码实例
2014/08/21 Python
Python实现Linux下守护进程的编写方法
2014/08/22 Python
10种检测Python程序运行时间、CPU和内存占用的方法
2015/04/01 Python
Python基于PycURL实现POST的方法
2015/07/25 Python
Python中list列表的一些进阶使用方法介绍
2015/08/15 Python
Python实现导出数据生成excel报表的方法示例
2017/07/12 Python
numpy.std() 计算矩阵标准差的方法
2018/07/11 Python
python write无法写入文件的解决方法
2019/01/23 Python
Python常用模块os.path之文件及路径操作方法
2019/12/03 Python
Python中的整除和取模实例
2020/06/03 Python
python中get和post有什么区别
2020/06/19 Python
Flask中jinja2的继承实现方法及实例
2021/03/03 Python
HTML5 本地存储和内容按需加载的思路和方法
2011/04/07 HTML / CSS
李维斯牛仔裤荷兰官方网站:Levi’s NL
2020/08/23 全球购物
安全生产承诺书
2014/03/26 职场文书
元旦趣味活动方案
2014/08/22 职场文书
考试后的感想
2015/08/07 职场文书
InterProcessMutex实现zookeeper分布式锁原理
2022/03/21 Java/Android
Golang map映射的用法
2022/04/22 Golang