rest参数与扩展运算符

  1. rest参数

    当遇上这样一种需求:对于输入的参数,求和返回,但传入的参数个数并不确定。

    // 在es5中,通常是使用函数自身的arguments对象实现的
    function sum () {
    let sum = 0;
    for(let i = 0; i < arguments.length; i++) {
    sum += arguments[i];
    }
    return sum;
    }

    // 使用Array.from将其转化为数组,就可以使用数组的方法
    function sum () {
    // arguments对象是一个伪数组,必须转化为数组才能使用reduce方法
    return Array.from(arguments).reduce((temp, value) => temp + value, 0);
    }
    // 使用Array.prototype.call()方法返回一个数组对象 --> 将伪数组转换为数组
    function sum () {
    return Array.prototype.call(arguments).reduce((temp, value) => temp +value, 0);
    }

    // ES6中还可以通过rest参数接收函数参数,并转换成一个数组
    function sum (...plus) {
    return plus.reduce((temp, value) => temp + value, 0);
    }

    注意:rest参数只能作为函数的最后一个参数,否则会报错

    function func (a, ...rest, b) {
    // do something
    }
    // Rest Parameter must be last formal paramter
  2. 扩展运算符

    扩展运算符与rest参数恰好是一个逆过程,rest参数是将多个参数转换成一个数组,而运算符扩展则是将一个数组扩展成多个参数的形式。

     // 现有一个数组
    let arr = [1, 2, 3, 4, 5];
    // 有一个求和函数
    function sum (...rest) {
    return rest.reduce((temp, value) => temp + value, 0);
    }
    // 现在需要通过sum函数对数组进行求和操作,但是函数需要的参数不是数组
    // 在es5中是不容易实现的
    // 但是使用扩展运算符,恰好可以解决问题
    sum(...arr);
    let arr1 = [1, 2, 3, 4, 5];
    let arr2 = [6, 7, 8];
    // 求arr1和arr2所有元素的和
    sum(...arr1, ...arr2);

    扩展运算符还可以用于数组的复制

    let arr1 = [1, 2, 3, 4];
    // ...arr1 扩展运算符就相当于 1, 2, 3, 4 --> 即数组的展开
    let copy = [...arr1];

    对于任何实现了遍历器接口(Iterator)的对象都可以使用扩展运算符

     let lis = document.querySelectorAll('li');
    console.log(...lis); // <li>a</li> <li>b</li> <li>c</li>
    // querySelectorAll()函数返回的是一个NodeList对象(注意:与document.get...系列返回的HTML集合是不一样的)
    let lisList = [...lis];
    // 内部的...后的参数是一个NodeList对象,NodeList对象实现了遍历器接口,因此能够用扩展运算符进行扩展,而后形成一个新数组,使用该方法可以将伪数组转化为数组

rest参数与扩展运算符的更多相关文章

  1. rest 参数和扩展运算符

    rest 参数和扩展运算符 rest 参数的形式为 ...变量名:扩展运算符是三个点 .... rest 参数 function add(...values) { console.log(values ...

  2. rest 参数与扩展运算符

    rest 参数与扩展运算符 1.rest 参数 ES6 引入 rest 参数(形式为...变量名),用于获取函数的多余参数,这样就不需要使用arguments对象了.rest 参数搭配的变量是一个数组 ...

  3. ES6 rest参数和扩展运算符

    rest参数 ES6引入了rest参数(形式为“…变量名”).其中rest参数搭配的变量是一个数组可以使用数组的一切操作. 例: function rest(...values){ let sum=0 ...

  4. es6 默认参数、rest参数、扩展运算符

    1.默认值 现在可以在定义函数的时候指定参数的默认值了,而不用像以前那样通过逻辑或操作符来达到目的了. function sayHello(name){ //传统的指定默认参数的方式 var name ...

  5. ES6学习笔记(一)——扩展运算符和解构赋值

    前言 随着前端工程化的快速推进,在项目中使用ES6甚至更高的ES7等最近特性早已不是什么新鲜事.之前还觉得既然浏览器支持有限,那了解一下能看懂就好,然而仅仅了解还是不够的,现在放眼望去,那些成熟框架的 ...

  6. es6中参数【默认值,扩展运算符】

    参数默认值 1.普通参数 function info(age,name="grace"){ console.log(name); } info(); //输入:grace 2.对象 ...

  7. es6可变参数-扩展运算符

    es5中参数不确定个数的情况下: //求参数和 function f(){ var a = Array.prototype.slice.call(arguments); var sum = 0; a. ...

  8. ES6躬行记(2)——扩展运算符和剩余参数

    扩展运算符(Spread Operator)和剩余参数(Rest Parameter)的写法相同,都是在变量或字面量之前加三个点(...),并且只能用于包含Symbol.iterator属性的可迭代对 ...

  9. ...扩展运算符+rest参数+call/apply/bind

    之前在set,map里面有提过扩展运算符的概念,但是今天偶然遇到一个问题,类似于扩展运算符的经典用法,突然发现对其了解不是很深,所以再来整理一下扩展运算符的相关知识. 重点:扩展运算符内部调用的是数据 ...

随机推荐

  1. python 【pandas】读取excel、csv数据,提高索引速度

    问题描述:数据处理,尤其是遇到大量数据且需要for循环处理时,需要消耗大量时间,如代码1所示.通过data['trip_time'][i]的方式会占用大量的时间 代码1 import time t0= ...

  2. caffe分类

    1.制作数据  标签   label.bat dir/s/on/b >.txt 2.制作lmdb     convert_lmdb.bat SET GLOG_logtostderr= E:\ca ...

  3. Activiti之流程通过、驳回、会签、转办、中止、挂起等核心操作封装(Activiti5.9)

    http://blog.csdn.net/rosten/article/details/38300267 package com.famousPro.process.service.impl; imp ...

  4. loglog 函数的使用

    验证数值算法的正确性,有一个很重要的指标就是收敛阶($\tt\bf Convergent~Rate$) 当有误差估计: $$Error=\lVert u(x)-u_N(x) \rVert \simeq ...

  5. mysql 查询正在执行的进程-亲试ok

    命令:show processlist 每一列的含义和用途: 第一列 id,不用说了吧,一个标识,你要kill一个语句的时候很有用. 第二列 user列,显示单前用户,如果不是root,这个命令就只显 ...

  6. WDA基础十五:POPUP WINDOW

    1.组件控制器定义属性: 2.实现popup方法: METHOD stock_popup . DATA: l_cmp_api TYPE REF TO if_wd_component, l_window ...

  7. hadoop HA学习

    一 HDFS HA架构图 二 HDFS HA组件 Active NameNode和Standby NameNode 在NameNode的HA方案中有两个不同状态的NameNode,分别为活跃态(Act ...

  8. AES

    ES算法之理论与编程结合篇 1 前言 AES是现在使用最多的对称密钥分组密码算法,在逆向的过程中经常碰到,这几天处于离职期,有点时间,于是乎想细细的来研究一下它的原理,也算是离职的一个纪念吧. 网上的 ...

  9. 【技巧】EasyUI分页组件pagination显示项控制

    我们使用easyui分页时,分页组件显示项有很多,默认如下是这样的: 有时候我们并不想显示这么多控制项,我们可以通过属性来控制:如下来自EasyUI官网: 如下写法,在datagrid中使用,如下控制 ...

  10. UML之领域建模

    一 定义:领域建模是对领域内的概念类或现实世界中对象的可视化表示.又称概念模型.领域对象模型.分析对象模型.它专注于分析问题领域本身,发掘重要的业务领域概念,并建立业务领域概念之间的关系.业务对象模型 ...