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 相关文章推荐
Web版彷 Visual Studio 2003 颜色选择器
Jan 09 Javascript
jquery组件使用中遇到的问题整理及解决
Feb 21 Javascript
自定义jquery模态窗口插件无法在顶层窗口显示问题
May 29 Javascript
常用的JavaScript模板引擎介绍
Feb 28 Javascript
JS实现兼容各浏览器解析XML文档数据的方法
Jun 01 Javascript
js捕捉键盘事件和按键键值的方法
Oct 10 Javascript
学习Node.js模块机制
Oct 17 Javascript
javascript中json基础知识详解
Jan 19 Javascript
js技巧之十几行的代码实现vue.watch代码
Jun 09 Javascript
nuxt.js中间件实现拦截权限判断的方法
Nov 21 Javascript
Vue2.0 实现页面缓存和不缓存的方式
Nov 12 Javascript
JavaScript中如何对多维数组(矩阵)去重的实现
Dec 04 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实现手机号码中间四位用星号(*)隐藏的自定义函数分享
2014/09/27 PHP
php中strlen和mb_strlen用法实例分析
2016/11/12 PHP
PHP如何解决微信文章图片防盗链
2020/12/09 PHP
锋利的jQuery 要点归纳(一) jQuery选择器
2010/03/21 Javascript
基于OO的动画附加插件,可以实现弹跳、渐隐等动画效果 分享
2013/06/24 Javascript
extjs render 用法介绍
2013/09/11 Javascript
JS小功能(button选择颜色)简单实例
2013/11/29 Javascript
ext combobox动态加载数据库数据(附前后台)
2014/06/17 Javascript
node.js中的buffer.toJSON方法使用说明
2014/12/14 Javascript
JavaScript实现判断图片是否加载完成的3种方法整理
2015/03/13 Javascript
JS取模、取商及取整运算方法示例
2016/10/13 Javascript
JavaScript常见的五种数组去重的方式
2016/12/15 Javascript
Vue.js系列之项目结构说明(2)
2017/01/03 Javascript
浅谈regExp的test方法取得的值变化的原因及处理方法
2017/03/01 Javascript
利用n工具轻松管理Node.js的版本
2017/04/21 Javascript
vue.js默认路由不加载linkActiveClass问题的解决方法
2017/12/11 Javascript
js实现上传并压缩图片效果
2018/01/10 Javascript
React Hooks的深入理解与使用
2018/11/12 Javascript
uni-app自定义导航栏按钮|uniapp仿微信顶部导航条功能
2019/11/12 Javascript
小程序中手机号识别的示例
2020/12/14 Javascript
[53:52]EG vs VGJ.T 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
python+VTK环境搭建及第一个简单程序代码
2017/12/13 Python
Python通过属性手段实现只允许调用一次的示例讲解
2018/04/21 Python
Python基于滑动平均思想实现缺失数据填充的方法
2019/02/21 Python
深入浅析Python 中的sklearn模型选择
2019/10/12 Python
pandas之分组groupby()的使用整理与总结
2020/06/18 Python
python按顺序重命名文件并分类转移到各个文件夹中的实现代码
2020/07/21 Python
英国历史最悠久的DJ设备供应商:DJ Finance、DJ Warehouse、The DJ Shop
2019/09/04 全球购物
俄罗斯护发和专业化妆品购物网站:Hihair
2019/09/28 全球购物
描述Cookie和Session的作用,区别和各自的应用范围,Session工作原理
2015/03/25 面试题
行政办公室岗位职责
2014/03/18 职场文书
大学生评语大全
2014/04/18 职场文书
开展批评与自我批评发言材料
2014/05/15 职场文书
服务理念口号
2014/06/11 职场文书
我心目中的好老师活动方案
2014/08/19 职场文书
筑梦中国心得体会
2016/01/18 职场文书