zoukankan      html  css  js  c++  java
  • 剩余参数

    剩余参数语法允许我们将一个不定数量的参数表示为一个数组。

    剩余参数的语法形式是三个点后跟一个标志符。

    语法

    1 function(a, b, ...theArgs) {
    2     //函数体
    3 }

    如果函数的最后一个命名参数 ... 为前缀,则它将成为一个由剩余参数组成的真数组,其中从0(包括)到theArgs.length(排除)的元素由传递给函数的实际参数提供。

    1 function sum(...theArgs) {
    2     return theArgs.reduce((previous, current) => {
    3         return previous + current;
    4     });
    5 }
    6 
    7 console.log(sum(1, 2, 3));  //6
    8 
    9 console.log(sum(1, 2, 3, 4));   //10

    剩余参数和arguments对象的区别

    1. 剩余参数只包含那些没有对应形参的实参,而arguments对象包含了传给函数的所有实参
    2. arguments对象不是一个真正的数组,而剩余参数是真正的Array实例,也就是说能够在它上面直接使用所有的数组方法,比如sort,map,forEach或pop。
    3. arguments对象还有一些附加的属性(如callee属性)。

    将arguments对象转换为数组

     1 function f(a, b) {
     2     var normalArray = Array.prototype.slice.call(arguments);
     3     //or
     4     var normalArray = [].slice.call(arguments);
     5     //or
     6     var normalArray = Array.from(arguments);
     7     
     8     var first = normalArray.shift();  //OK
     9     var first = arguments.shift(); //ERROR
    10 }
    11 
    12 function f(...args) {
    13     var normalArray = args;
    14     var first = normalArray.shift(); //OK
    15 }

    解构剩余参数

    剩余参数可以被解构,这意味着它们的数据可以被解包到不同的变量中。

    1 function f(...[a, b, c]) {
    2     return a + b + c;
    3 }
    4 
    5 f(1);  //NaN (b and c are undefined)
    6 f(1, 2, 3) ;//6
    7 f(1, 2, 3, 4); //6

    注:剩余参数后面不能再跟参数。剩余参数不能与arguments对象一起使用。

  • 相关阅读:
    SpringBoot读取Resource下文件的几种方式(十五)
    Springboot+vue前后端分离文件上传、下载方式及与Spring的异同(十四)
    springboot多个service互相调用的事务处理(十三)
    Bigdecimal用法
    Linux常见wenti
    informix常见问题
    Spring-boot常见问题(十二)
    浅析VO、DTO、DO、PO的概念、区别和用处(八)
    Tbase读写分离与分库分表
    函数的节流和抖动
  • 原文地址:https://www.cnblogs.com/sparkler/p/13734847.html
Copyright © 2011-2022 走看看