本文非原创,希望原创作者不要介意。
- 扩展运算符
function doStuff (x,y,z) {} //定义函数时也可使用扩展运算符定义
var args = [0,1,2];
//调用函数,并进行传参
doStuff.apply(null,args);
doStuff(...args); //es6新增的方法,在参数数组前加上扩展运算符
- 函数形参的默认赋值
function add(a=10,b=20) {
console.log(a + b);
}
add();
- 合并数组
arr1.push(...arr2); //把arr2合并到arr1的后面
arr1.unshift(...arr2); //把arr2合并到arr1的前面
数组中合并数组
var arr1 = ['two','three'];
var arr2 = ['one',...arr1,'four','five'];
- 复制数组
在过去,我们会使用Array.prototype.slice去实现,现在可以使用扩展运算符来得到一个复制后的数组
var arr = [1,2,3];
var arr2 = [...arr]; //就像arr.slice
arr2.push(4);
记住:数组仍通过指针得到,所以我们并没有复制数组本身,我们复制的只是一个新的指针。
- 把arguments或NodeList转为数组
和复制数组十分类似,我们以前使用Array.prototype.slice去把NodeList和arguments转换成真正的数组,但现在我们可以使用扩展运算符去完成这个工作:
//NodeList或arguments(我们常说的类数组) 转 数组
var aDiv = document.querySelectorAll('div'); //获取所有的div标签
// 转数组方法1: 传统方法
console.log(Array.prototype.slice.call(aDiv));
// es6新增方法2:
console.log(Array.from(aDiv));
// es6扩展运算符方法3:
console.log([...aDiv]);
你还可以让arguments在传递时就变成一个数组:
var myFn = function(...args){
// args等同于[...args];
}
- 使用Math函数
扩展运算符把数组“扩展”成一个个不同的参数是理所当然的,所以,可以在任何函数参数上进行扩展,而且它能接受任意多个参数:
let numbers = [1,2,3,4];
Math.min(...numbers);
在Math对象的成员方法上使用扩展运算符是一个完美的例子,而且只需要传递一个参数。
- 有趣的解构赋值
// 解构赋值是非常有意思的,以下例子v8引擎暂未实现
let {x, y, ...z} = {x: 1, y: 2, a: 3, b: 4};
console.log(x);
console.log(y);
console.log(z);