您好,欢迎来到华拓科技网。
搜索
您的当前位置:首页ES6基础之展开语法(Spread syntax)

ES6基础之展开语法(Spread syntax)

来源:华拓科技网


展开语法用"..."进行表示,展开语法将可迭代的对象拆分成的值(语法层面展开)。扩展语法通常用于将可迭代的对象的值传递到函数的参数中。今天小编将从以下方面进行介绍:

  • 函数传参中的应用
  • 数组的相关应用
  • 剩余参数的应用
  • 函数传参中的应用
  • 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"
    

    小节

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

    Copyright © 2019- huatuo6.cn 版权所有 赣ICP备2024042791号-9

    违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

    本站由北京市万商天勤律师事务所王兴未律师提供法律服务