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 相关文章推荐
jquery 简短右键菜单 多浏览器兼容
Jan 01 Javascript
javascript下数值型比较难点说明
Jun 07 Javascript
jQuery动态创建html元素的常用方法汇总
Sep 05 Javascript
javascript作用域问题实例分析
Jul 13 Javascript
JavaScript变量的作用域全解析
Aug 14 Javascript
jQuery中的each()详细介绍(推荐)
May 25 Javascript
用纯Node.JS弹出Windows系统消息提示框实例(MessageBox)
May 17 Javascript
angular动态删除ng-repaeat添加的dom节点的方法
Jul 20 Javascript
关于JS与jQuery中的文档加载问题
Aug 22 jQuery
详解微信小程序-扫一扫 wx.scanCode() 扫码大变身
Apr 30 Javascript
如何通过Proxy实现JSBridge模块化封装
Oct 22 Javascript
uniapp引入支付宝原生扫码插件步骤详解
Jul 23 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调用MsSQL存储过程使用内置RETVAL获取过程中的return值
2013/07/03 PHP
PHP数据库链接类(PDO+Access)实例分享
2013/12/05 PHP
Win2003+apache+PHP+SqlServer2008 配置生产环境
2014/07/29 PHP
php中异常处理方法小结
2015/01/09 PHP
Autocomplete Textbox Example javascript实现自动完成成功
2007/08/17 Javascript
javascript dom 基本操作小结
2010/04/11 Javascript
json格式化/压缩工具 Chrome插件扩展版
2010/05/25 Javascript
js和C# 时间日期格式转换的简单实例
2016/05/28 Javascript
AngularJS ng-change 指令的详解及简单实例
2016/07/30 Javascript
jQuery文字轮播特效
2017/02/12 Javascript
Angular1.x复杂指令实例详解
2017/03/01 Javascript
JavaScript 自定义事件之我见
2017/09/25 Javascript
js正则相关知识点专题
2018/05/10 Javascript
浅谈vue父子组件怎么传值
2018/07/21 Javascript
jquery实现动态改变css样式的方法分析
2019/05/27 jQuery
微信小程序vant弹窗组件的实现方式
2020/02/21 Javascript
vuex实现购物车功能
2020/06/28 Javascript
介绍Python的Django框架中的QuerySets
2015/04/20 Python
python实现多线程抓取知乎用户
2016/12/12 Python
Python实现的多线程http压力测试代码
2017/02/08 Python
Python 3.6 -win64环境安装PIL模块的教程
2019/06/20 Python
python 爬取学信网登录页面的例子
2019/08/13 Python
python实现高斯(Gauss)迭代法的例子
2019/11/20 Python
MAC平台基于Python Appium环境搭建过程图解
2020/08/13 Python
解决tensorflow模型压缩的问题_踩坑无数,总算搞定
2021/03/02 Python
标签和贴纸印刷:Lightning Labels
2018/03/22 全球购物
Orvis官网:自1856年以来,优质服装、飞钓装备等
2018/12/17 全球购物
英国第一的市场和亚马逊替代品:OnBuy
2019/03/16 全球购物
人力资源管理专业应届生求职信
2013/09/28 职场文书
入党转预备思想汇报
2014/01/07 职场文书
雪山饭庄的创业计划书范文
2014/01/18 职场文书
个人现实表现材料
2014/02/04 职场文书
广告传媒专业应届生求职信
2014/03/01 职场文书
外贸专业求职信
2014/03/09 职场文书
颐和园导游词400字
2015/01/30 职场文书
在pyCharm中下载第三方库的方法
2021/04/18 Python