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 31 Javascript
node.js中的fs.mkdirSync方法使用说明
Dec 17 Javascript
浅谈jQuery构造函数分析
May 11 Javascript
javascript和jQuery中的AJAX技术详解【包含AJAX各种跨域技术】
Dec 15 Javascript
vue 修改 data 数据问题并实时显示的方法
Aug 27 Javascript
Nuxt升级2.0.0时出现的问题(小结)
Oct 08 Javascript
微信小程序云开发之数据库操作
May 18 Javascript
Vue.use()在new Vue() 之前使用的原因浅析
Aug 26 Javascript
Vue组件通信中非父子组件传值知识点总结
Dec 05 Javascript
深入解读VUE中的异步渲染的实现
Jun 19 Javascript
vue+Element-ui实现登录注册表单
Nov 17 Javascript
详解TypeScript中的类型保护
Apr 29 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设计模式 Template (模板模式)
2011/06/26 PHP
深入理解PHP变量的值类型和引用类型
2015/10/21 PHP
php使用ffmpeg获取视频信息并截图的实现方法
2016/05/03 PHP
ThinkPHP5 的简单搭建和使用详解
2018/11/15 PHP
小程序微信退款功能实现方法详解【基于thinkPHP】
2019/05/05 PHP
jQuery实现设置、移除文本框默认值功能
2015/01/13 Javascript
jQuery插件简单实现方法
2015/07/18 Javascript
js代码实现无缝滚动(文字和图片)
2015/08/20 Javascript
新手学习前端之js模仿淘宝主页网站
2016/10/31 Javascript
JavaScript ES6中CLASS的使用详解
2016/11/22 Javascript
微信公众平台开发教程(六)获取个性二维码的实例
2016/12/02 Javascript
JS正则替换去空格的方法
2017/03/24 Javascript
js自定义trim函数实现删除两端空格功能
2018/02/09 Javascript
js中数组常用方法总结(推荐)
2019/04/09 Javascript
使用vue中的混入mixin优化表单验证插件问题
2019/07/02 Javascript
更优雅的微信小程序骨架屏实现详解
2019/08/07 Javascript
mpvue微信小程序的接口请求fly全局拦截代码实例
2019/11/13 Javascript
vue模块移动组件的实现示例
2020/05/20 Javascript
JavaScript实现简单动态表格
2020/12/02 Javascript
[06:30]DOTA2英雄梦之声_第15期_死亡先知
2014/06/21 DOTA
Python中使用PIL库实现图片高斯模糊实例
2015/02/08 Python
python持久性管理pickle模块详细介绍
2015/02/18 Python
Python socket网络编程TCP/IP服务器与客户端通信
2017/01/05 Python
Python OpenCV实现图片上输出中文
2018/01/22 Python
python3 flask实现文件上传功能
2020/03/20 Python
Python读取YUV文件,并显示的方法
2018/12/04 Python
使用Python爬虫库requests发送表单数据和JSON数据
2020/01/25 Python
PyTorch 导数应用的使用教程
2020/08/31 Python
十八届三中全会学习方案
2014/02/16 职场文书
幼儿园三八妇女节活动方案
2014/03/11 职场文书
纪念九一八事变演讲稿1000字
2014/09/14 职场文书
毕业赠语大全
2015/06/23 职场文书
Python数据分析入门之数据读取与存储
2021/05/13 Python
CentOS7安装GlusterFS集群以及相关配置
2022/04/12 Servers
python多次执行绘制条形图
2022/04/20 Python
Python开发简易五子棋小游戏
2022/05/02 Python