美文网首页JavaScript
ES6系列 (九)默认参数和rest操作符

ES6系列 (九)默认参数和rest操作符

作者: Eastboat | 来源:发表于2019-10-11 23:55 被阅读0次

有时候语言的新特性提供了某种更简洁和可读的方式来实现以前不可能或者几乎不能实现的事情,但这并不代表着代码的可读性很强,这正是默认参数和 rest 参数所做的事情

目标

  • 如何使用默认参数
  • 如何使用 rest 操作符来收集参数
  • 如何使用 rest 在函数之间传递参数

默认参数

假设我们要画一个 800*400 的图标

function mapAreaChart(width, height) {
  if (!width) {
    width = 800;
  }
  if (!height) {
    height = width / 2;
  }
  //其他操作
  console.log(`宽度:${width} 高度:${height}`);
}
mapAreaChart(); //宽度:800 高度:400
mapAreaChart(200, 300); // 宽度:200 高度:300

接下来我们使用默认参数完成同样的事情

//对于默认参数的赋值,可以使用任意的表达式,计算函数的同时也计算了表达式
function mapAreaChart(width = 800, height = width / 2) {
  //some code
}

可以使用作用域内的任何变量,表达式的上下文和其一起调用的函数上下文相同

const obj = {
  normalName: "bili",
  sayName(myName = this.normalName + "bili") {
    console.log(myName);
  }
};

obj.sayName(); //bilibili

obj.normalName = "cili";

obj.sayName(); //cilibili

必选参数必须优先于可选参数

function sum(num1 = 0, num2) {
  console.log(num1 + num2);
}

sum(9, 1); //10
sum(1); // 1 + undefined  =  NaN

rest 收集参数

之前学习了 Array.from 并利用 arguments 对象创建数组,现在我们可以使用 rest

//方式一 数组是调用slice创建一个真实数组副本
function svg() {
  const args = [].slice.call(arguments);
  const sum = args.reduce(function(a, b) {
    return a + b;
  });
  return sum / args.length;
}
console.log(svg(1, 2, 3, 4)); //2.5
//方式二 Array.from
function svg() {
  const args = Array.from(arguments);
  const sum = args.reduce(function(a, b) {
    return a + b;
  });
  return sum / args.length;
}
console.log(svg(1, 2, 3, 4)); //2.5
//方式三 rest收集arguments放在args数组里
function svg(...args) {
  const sum = args.reduce(function(a, b) {
    return a + b;
  });
  return sum / args.length;
  console.log(svg(1, 2, 3, 4)); //2.5
}

rest 参数必须是最后一个,否则会抛出语法错误

如下我有一个工具函数,没写注释

function util(object) {
  const props = Array.from(arguments).slice(1);
  return props.map(function(property) {
    return object[property];
  });
}

rest 改写后一目了然

function util(object, ...props) {
  return props.map(function(property) {
    return object[property];
  });
}

案例:打印 bootstrap 的 css 类

function cssClass(primary, ...args) {
  const names = args.reduce(
    (list, other) => {
      return list.concat(`${primary}-${other}`);
    },
    [primary]
  );
  return names.join(" ");
}

console.log(cssClass("button", "info", "danger", "success"));
//button button-info button-danger button-success

相关文章

  • ES6系列 (九)默认参数和rest操作符

    有时候语言的新特性提供了某种更简洁和可读的方式来实现以前不可能或者几乎不能实现的事情,但这并不代表着代码的可读性很...

  • 函数的拓展

    1、ES6允许为函数参数设置默认值,即直接卸载参数定义的后面。 2、参数的默认作用域 3、rest参数 ES6引入...

  • 第一章 现代前端开发

    1 函数默认参数 2 rest参数 rest是真正的数组 3 展开操作符 用于函数调用 用于数组字面量 对象的展开...

  • ES6 Function类型

    相比ES5,ES6 允许为函数的参数设置默认值。 即直接写在参数定义的后面。 ES6 引入 rest 参数(形式为...

  • ES6 笔记 Rest 参数和 默认参数

    函数中剩余的参数可以用...符号来放入一个数组张 如果调用containsAll("banana", "b", "...

  • airbnb入门(三)

    ES6 arrow function rest参数 ...params形式的参数,被称为rest参数。 ...pa...

  • [underscore 源码学习] rest 参数 & 创建对象

    rest 参数 即自由参数、松散参数,自由和松散参数个数是随意的,与之对应的是固定参数。 ES6 引入 rest ...

  • React最佳入门

    起步 ES6 默认参数与rest sprea(展开) 模板字符串 解构赋值 类 ES6模块化 a.js b.js ...

  • 【es6笔记】es6的入门简介_函数和参数(3)

    这里整理了ES6新增的函数(箭头函数)和参数(默认值和rest)相关内容。 欢迎大家的意见和交流 email: l...

  • 第2章 ES6基础编程

    函数的扩展 rest参数 箭头函数 rest参数-三点运算符 ES6 引入 rest 参数(形式为“...变量名”...

网友评论

    本文标题:ES6系列 (九)默认参数和rest操作符

    本文链接:https://www.haomeiwen.com/subject/sndfmctx.html