【ES6基础】展开语法(Spread syntax)

栏目: JavaScript · 发布时间: 5年前

内容简介:明天是元宵佳节,在此小编提前祝大家元宵佳节快乐!今天小编在这里给大家继续介绍ES6的语法糖——展开语法(Spread syntax)。展开语法用"..."进行表示,展开语法将可迭代的对象拆分成单个的值(语法层面展开)。展开语法通常用于将可迭代的对象的值传递到函数的参数中。今天小编将从以下方面进行介绍:
【ES6基础】展开语法(Spread syntax)

明天是元宵佳节,在此小编提前祝大家元宵佳节快乐!今天小编在这里给大家继续介绍ES6的语法糖——展开语法(Spread syntax)。

展开语法用"..."进行表示,展开语法将可迭代的对象拆分成单个的值(语法层面展开)。

展开语法通常用于将可迭代的对象的值传递到函数的参数中。今天小编将从以下方面进行介绍:

  • 函数传参中的应用
  • 数组的相关应用
  • 剩余参数的应用

本篇文章阅读时间预计10分钟

函数传参中的应用

ES6之前,如果我们希望将数组作为参数分别传递给函数中的参数,我们可以使用Function的apply()方法。如下段代码所示:

function myFunction(a, b) {
  return a + b;
}
var data = [1, 4];
var result = myFunction.apply(null, data);
console.log(result); //Output "5”复制代码

从上述代码,apply方法接受一个数组,将它们分拆成单个参数传递给函数进行调用。

ES6的展开语法能让我们以更简洁的方式进行调用,如下段代码所示:

function myFunction(a, b) {
    return a + b; 
}
let data = [1, 4];
let result = myFunction(...data);
console.log(result); //Output "5”复制代码

代码运行期间,JavaScript解释器调用myFunction之前,将会用1,4表达式替换...运算符:

let result = myFunction(...data);复制代码

上述代码将会进行如下替换:

let result = myFunction(1,4);复制代码

替换后,函数中的代码将会继续执行。

数组的相关应用

数组的合并

展开语法可将数组添加到另外一个数组中,成为其中的一部分。

let array1 = [2,3,4];
let array2 = [1, ...array1, 5, 6, 7];
console.log(array2); //Output "1, 2, 3, 4, 5, 6, 7”复制代码

代码运行期间,如下代码:

let array2 = [1, ...array1, 5, 6, 7];复制代码

上述代码将会替换成如下代码:

let array2 = [1, 2, 3, 4, 5, 6, 7];复制代码

在push方法中的运用

有时候,我们需要将一个数组的内容追加到另一个数组中,ES6之前我们可以这么做,如下段代码所示:

var array1 = [2,3,4];
var array2 = [1];
Array.prototype.push.apply(array2, array1);
console.log(array2); //Output "1, 2, 3, 4”复制代码

ES6的展开语法能以更简洁的形式实现,如下段代码所示:

let array1 = [2,3,4];
let array2=[1];
array2.push(...array1);
console.log(array2); //Output "1, 2, 3, 4”复制代码

代码运行期间,如下代码:

array2.push(...array1);复制代码

上述代码将会替换成如下代码:

array2.push(2, 3, 4);复制代码

传递多个数组参数

我们可以使用展开语法传递多个数组进行参数传递,如下段代码所示:

let array1 = [1];
let array2 = [2];
let array3 = [...array1, ...array2, ...[3, 4]];//multi arrayspread
let array4 = [5];
function myFunction(a, b, c, d, e) {
  return a+b+c+d+e;
}
let result = myFunction(...array3, ...array4); //multi array spread
console.log(result); //Output "15”复制代码

剩余参数的应用

我们知道JS函数内部有个arguments对象,可以拿到全部实参。现在ES6给我们带来了一个新的对象,可以拿到除开始参数外的参数,即剩余参数,我们可以使用展开语法...进行获取。

ES6之前,我们可以这样获取剩余参数,如下段代码所示:

function myFunction(a, b) {
    const args = Array.prototype.slice.call(arguments, myFunction.length);
    console.log(args);
}
myFunction(1, 2, 3, 4, 5); //Output "3, 4, 5”复制代码

ES6中,上述代码我们可以这样改下,如下段代码所示:

function myFunction(a, b, ...args) {
    console.log(args); //Output "3, 4, 5"
}
myFunction(1, 2, 3, 4, 5);复制代码

是不是很简单,有个我们需要注意的事项,一旦函数中的参数第一个参数使用剩余参数,便不能添加任何参数,否则将会抛出错误。例如下段代码所示:

function fn(...rest,foo) {}  
//Output "SyntaxError: Rest parameter must be last formal parameter"复制代码

小节

今天的内容就到这里,展开语法糖是不是特别的酷啊,在日后的开发中,我们尽量使用新的语法糖替代旧的写法。让我们代码看起来更加干净、整洁、易懂。


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

The Photoshop Anthology

The Photoshop Anthology

Corrie Haffly / SitePoint Pty. Ltd. / 2006 / USD 39.95

The Photoshop Anthology is full-color, question-and-answer book for Web Designers who want to use Photoshop to build Websites and create better looking web graphics more effectively. The book covers: ......一起来看看 《The Photoshop Anthology》 这本书的介绍吧!

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具