Spread Syntax vs Rest Parameter in ES2015 / ES6

前端 未结 10 1629
隐瞒了意图╮
隐瞒了意图╮ 2020-11-27 10:52

I am confused about the spread syntax and rest parameter in ES2015. Can anybody explain the difference between them with proper examples?

相关标签:
10条回答
  • 2020-11-27 11:21

    ES6 has new feature three dots ...

    Here is how we can use these dots:

    1. As Rest/Collector/Gather
    var [c, ...m] = [1,2,3,4,5]; // m -> [2,3,4,5]
    

    Here ...m is a collector, it collects the rest of the parameters. Internally when we write:

    var [c, ...m] = [1,2,3,4,5]; JavaScript does following

    var c = 1,
        m = [2, 3, 4, 5];
    
    1. As Spread
    var params = [ "hello", true, 7 ];
    var other = [ 1, 2, ...params ]; // other => [1,2,"hello", true, 7]
    

    Here, ...params spreads so as to adding all of its elements to other

    Internally JavaScript does following

    var other = [1, 2].concat(params);
    

    Hope this helps.

    0 讨论(0)
  • 2020-11-27 11:29

    Summary:

    In javascript the ... is overloaded. It performs a different operations based on where the operator is used:

    1. When used in function arguments of a function declaration/expression it will convert the remaining arguments into an array. This variant is called the Rest parameters syntax.
    2. In other cases it will spread out the values of an iterable in places where zero or more arguments (function calls) or elements (array literals) are expected. This variant is called the Spread syntax.

    Example:

    Rest parameter syntax:

    function rest(first, second, ...remainder) {
      console.log(remainder);
    }
    
    // 3, 4 ,5 are the remaining parameters and will be 
    // merged together in to an array called remainder 
    rest(1, 2, 3, 4, 5);

    Spread syntax:

    function sum(x, y, z) {
      return x + y + z;
    }
    
    const numbers = [1, 2, 3];
    
    // the numbers array will be spread over the 
    // x y z parameters in the sum function
    console.log(sum(...numbers));
    
    
    // the numbers array is spread out in the array literal
    // before the elements 4 and 5 are added
    const newNumbers = [...numbers, 4, 5];
    
    console.log(newNumbers);

    0 讨论(0)
  • 2020-11-27 11:29

    When we see "..." in the code, it is either rest parameters or the spread operator.

    There’s an easy way to distinguish between them:

    When ... is at the end of function parameters, it’s “rest parameters” and gathers the rest of the list into the array. When ... occurs in a function call or alike, it’s called a “spread operator” and expands an array into the list. Use patterns:

    Rest parameters are used to create functions that accept any number of arguments. The spread operator is used to pass an array to functions that normally require a list of many arguments. Together they help to travel between a list and an array of parameters with ease. For more information about this click here

    0 讨论(0)
  • 2020-11-27 11:29

    Basically like in Python:

    >>> def func(first, *others):
    ...    return [first, *others]
    >>> func('a', 'b', 'c')
    ['a', 'b', 'c']
    
    0 讨论(0)
提交回复
热议问题