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 相关文章推荐
二行代码解决全部网页木马
Mar 28 Javascript
ASP.NET中基于JQUERY的高性能的TreeView补充
Feb 23 Javascript
js验证是否为数字的总结
Apr 14 Javascript
jquery如何判断某元素是否具备指定的样式
Nov 05 Javascript
JavaScript判断字符长度、数字、Email、电话等常用判断函数分享
Apr 01 Javascript
鼠标经过子元素触发mouseout,mouseover事件的解决方案
Jul 26 Javascript
jquery实现顶部向右伸缩的导航区域代码
Sep 02 Javascript
Jquery揭秘系列:ajax原生js实现详解(推荐)
Jun 08 Javascript
jQuery插件扩展实例【添加回调函数】
Nov 26 Javascript
深入理解vue-loader如何使用
Jun 06 Javascript
ztree+ajax实现文件树下载功能
May 18 Javascript
详解TypeScript的基础类型
Feb 18 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加入ftp扩展的解决方法
2013/02/07 PHP
php实现文件下载简单示例(代码实现文件下载)
2014/03/10 PHP
php的zip解压缩类pclzip使用示例
2014/03/14 PHP
PHP实现图片压缩的两则实例
2014/07/19 PHP
使用Appcan客户端自动更新PHP版本号(全)
2015/07/31 PHP
PHP使用token防止表单重复提交的方法
2016/04/07 PHP
PHP设计模式入门之迭代器模式原理与实现方法分析
2020/04/26 PHP
巧妙破除网页右键禁用的十大绝招
2006/08/12 Javascript
css把超出的部分显示为省略号的方法兼容火狐
2008/07/23 Javascript
js直接编辑当前cookie的脚本
2008/09/14 Javascript
Jquery 扩展方法
2010/05/06 Javascript
IE8下关于querySelectorAll()的问题
2010/05/13 Javascript
JavaScript阻止事件冒泡示例分享
2014/12/28 Javascript
Angularjs中的页面访问权限怎么设置
2016/11/11 Javascript
ES6中Proxy与Reflect实现重载(overload)的方法
2017/03/30 Javascript
jQuery制作全屏宽度固定高度轮播图(实例讲解)
2017/07/08 jQuery
微信小程序实现折叠面板
2018/01/31 Javascript
vue项目环境变量配置的实现方法
2018/10/12 Javascript
vue项目首屏加载时间优化实战
2019/04/23 Javascript
Vue 子组件与数据传递问题及注意事项
2019/07/11 Javascript
微信小程序转发事件实现解析
2019/10/22 Javascript
vue实现页面内容禁止选中功能,仅输入框和文本域可选
2019/11/09 Javascript
TypeScript的安装、使用、自动编译的实现
2020/04/10 Javascript
vue pages 多入口项目 + chainWebpack 全局引用缩写说明
2020/09/21 Javascript
python使用selenium登录QQ邮箱(附带滑动解锁)
2019/01/23 Python
Python 文件数据读写的具体实现
2020/01/24 Python
HTML5新增form控件和表单属性实例代码详解
2019/05/15 HTML / CSS
Sneaker Studio罗马尼亚网站:购买运动鞋
2018/11/04 全球购物
乌克兰珠宝大卖场:Zlato.ua
2020/09/27 全球购物
土木工程毕业生推荐信
2013/10/28 职场文书
中等生评语大全
2014/05/04 职场文书
2014年纳税评估工作总结
2014/12/23 职场文书
单位接收证明格式
2015/06/18 职场文书
公司中层管理培训心得体会
2016/01/11 职场文书
pandas中对文本类型数据的处理小结
2021/11/01 Python
配置Kubernetes外网访问集群
2022/03/31 Servers