ES6数组的扩展运算符
一、基本使用
ES6中函数可以使用 rest参数 接收函数的多余参数,组成一个数组,放在形参的最后面。
let fn = (a, ...value) => {
console.log(a);
console.log(value[0], value[1]);
};
add(10, 20, 30);
//
// 20 30
数组中的扩展运算符就好比 rest参数 的逆运算,将一个数组转为用逗号分隔的参数序列(也就是展开数组),在语法上,用三个点表示(...)。
var fruits = ['apple', 'banana', 'orange'];
console.log(...fruits); // apple banana orange
二、取代apply
扩展运算符主要应用于函数的调用,比如下面这种情况给俩个数求和,在ES5中可以使用 apply 方法实现:
let add = (a, b) => a + b;
let arr = [10, 20];
let result = add.apply(null, arr);
console.log(result); //
现在不必了,直接使用扩展运算符即可:
let add = (a, b) => a + b;
let arr = [10, 20];
console.log(add(...arr)); //
而且可以放置于形参中的任意位置,这点和 rest参数 不同:
let add = (a, b, c, d) => a + b + c + d;
let arr = [20, 30];
console.log(add(10, ...arr, 40)); //
下面是俩个比较实用的取代 apply 方法例子:
// 1、取出一个数字数组中的最大值 // ES5
let arr = [10, 15, 5, 20, 10];
alert(Math.max.apply(null, arr)); // // ES6
let arr = [10, 15, 5, 20, 10];
alert(Math.max(...arr)); // ---------------------------------------------- // 2、将一个数组添加到一个数组里 // ES5
let arr1 = [10, 20];
let arr2 = [30, 40];
Array.prototype.push.apply(arr1, arr2);
console.log(arr1); // [ 10, 20, 30, 40 ]
console.log(arr2); // [ 30, 40 ] // ES6
let arr1 = [10, 20];
let arr2 = [30, 40];
arr1.push(...arr2);
console.log(arr1); // [ 10, 20, 30, 40 ]
console.log(arr2); // [ 30, 40 ]
三、其他运用的地方
1、复制数组
在ES5中如果你这样复制数组式其实是不对的:
let arr1 = [10, 20];
let arr2 = arr1;
arr1.push(30);
console.log(arr1); // [ 10, 20, 30 ]
console.log(arr2); // [ 10, 20, 30 ]
因为数组式复合类型的数据,复制的仅仅是指针,其中一个数组发生变化,另一个数组当然随之变化。
因此需要这样做:
let arr1 = [10, 20];
let arr2 = arr1.concat();
arr1.push(30);
console.log(arr1); // [ 10, 20, 30 ]
console.log(arr2); // [ 10, 20 ]
现在ES6使用扩展运算符更加方便:
let arr1 = [10, 20];
let arr2 = [...arr1];
arr1.push(30);
console.log(arr1); // [ 10, 20, 30 ]
console.log(arr2); // [ 10, 20 ]
2、合并数组
ES5中合并数组可以这样做:
let arr1 = [10, 20];
let arr2 = [30, 40];
let arr3 = arr1.concat(arr2);
arr1.push(50);
console.log(arr1); // [ 10, 20, 50 ]
console.log(arr2); // [ 30, 40 ]
console.log(arr3); // [ 10, 20, 30, 40 ]
ES6中又有了新写法:
let arr1 = [10, 20];
let arr2 = [30, 40];
let arr3 = [...arr1, ...arr2];
arr1.push(50);
console.log(arr1); // [ 10, 20, 50 ]
console.log(arr2); // [ 30, 40 ]
console.log(arr3); // [ 10, 20, 30, 40 ]
注意:
以上俩种写法都是浅拷贝,合并成员是复合类型的数据就要注意了:
let arr1 = [{user: 'tom'}];
let arr2 = [{user: 'jack'}];
let arr3 = arr1.concat(arr2);
let arr4 = [...arr1, ...arr2];
alert(arr1[0] === arr3[0]); // true
alert(arr1[0] === arr4[0]); // true
原因还是这些对象成员拷贝的是地址。
ES6数组的扩展运算符的更多相关文章
- 数组的复制及ES6数组的扩展
一.数组的复制 // alert([1,2,3]==[1,2,3]); let cc = [0,1,2]; let dd = cc; alert(dd==cc);//此时改变dd会影响cc ES5 只 ...
- es6数组的扩展
数组扩展运算符 ...(三个点) const demoArr=[0,1,2,3,4] console.log(...demoArr) // 0 1 2 3 4 // 他把一个数组用逗号分隔了出来 // ...
- ES6数组的扩展--Array.from()和Array.of()
一. Array.from() : 将伪数组对象或可遍历对象转换为真数组 1.何为伪数组 如果一个对象的所有键名都是正整数或零,并且有length属性,那么这个对象就很像数组,语法上称为"类 ...
- ES6学习笔记-扩展运算符(...)
扩展运算符的定义: es6中引入扩展运算符(...),它用于把一个数组转化为用逗号分隔的参数序列. 它常用在不定参数个数时的函数调用,数组合并等情形. 用法一:不定参数个数时的函数调用 <scr ...
- ES6 数组的扩展
1. Array.from() Array.from()将类数组(array-like)对象与可遍历的对象转化为数组并返回. 下面是一个类数组 let arr = { '0':'a', '1':'b' ...
- es6可变参数-扩展运算符
es5中参数不确定个数的情况下: //求参数和 function f(){ var a = Array.prototype.slice.call(arguments); var sum = 0; a. ...
- es6 学习小记 扩展运算符 三个点(...)
参考: es6 扩展运算符 三个点(...) 经常回顾,方能真正掌握. 一.含义 扩展运算符( spread )是三个点(...).它好比 rest 参数的逆运算,将一个数组转为用逗号分隔的参数序列. ...
- (...)ES6三点扩展运算符
扩展运算符将一个数组转为用逗号分隔的参数序列 console.log(...[a, b, c]) // a b c 用于: 1 将一个数组,变为参数序列 let add = (x, y) => ...
- Vue的三个点es6知识,扩展运算符
Vue中的三个点在不同情境下的意思 操作数组 //里面放自己定义的方法 methods: { /** * 把数组中的元素孤立起来 */ iClick() { let iArray = ['1', '2 ...
随机推荐
- springMVC怎么改变form的提交方式为put或者delete
想着练习一下创建restful风格的网站呢,结果发现在jsp页面上并不能灵活使用put和delete提交方式.下面我的解决办法 一. form 只支持post和get两种提交方式,只支持get提交方式 ...
- ServiceStack.Ormlit sqlserver枚举类型映射字段类型为varchar
请当枚举类型上面加上[Flags]特性就可以了.
- oracle数据库分页原理
Oracle数据库的rownum 在Oracle数据库中,分页方式没有MySql这样简单,它需要依靠rownum来实现.Rownum表示一条记录的行号,值得注意的是它在获取每一行后才赋予.因此,想指定 ...
- “今日校园” App 用户体验分析
一.背景 为进一步提升信息化应用水平,更好的服务师生,南通大学智慧校园移动端APP“今日校园”定于11月5日正式上线运行.登陆APP可浏览学校新闻.校园生活.各部门微信公众号等内容,查看校内通知.校内 ...
- DAY5敏捷冲刺
站立式会议 工作安排 (1)服务器配置 对单词学习的记录储存 (2)数据库配置 单词学习记录+用户信息 燃尽图 燃尽图有误,已重新修改,先贴卡片的界面,后面补修改后燃尽图 代码提交记录
- Martin Fowler关于IOC和DI的文章(原版)
Inversion of Control Containers and the Dependency Injection pattern In the Java community there's b ...
- iOS开发JOSNModel<optional>,<convertondemand>,<index>
指定定义的key的类型 <optional>表示字段可选,例如 //链接字段是可选的,转换的时候允许link未空 @property (nonatomic,strong) NSString ...
- 【PHP】- PHPStorm+XDebug进行调试图文教程
转载:https://www.cnblogs.com/LWMLWM/p/8251905.html 这篇文章主要为大家详细介绍了PHPStorm+XDebug进行调试图文教程,内容很丰富,具有一定的 ...
- phpcms退出 提示 :退出成功0 。 的解决办法
打开/phpcms/modules/member/index.php 搜索如下代码: showmessage(L('logout_success').$synlogoutstr, $forward); ...
- 线程同步(使用了synchronized)和线程通讯(使用了wait,notify)
线程同步 什么是线程同步? 当使用多个线程来访问同一个数据时,非常容易出现线程安全问题(比如多个线程都在操作同一数据导致数据不一致),所以我们用同步机制来解决这些问题. 实现同步机制有两个方法:1.同 ...