侧边栏壁纸
博主头像
落叶人生博主等级

走进秋风,寻找秋天的落叶

  • 累计撰写 130562 篇文章
  • 累计创建 28 个标签
  • 累计收到 9 条评论
标签搜索

目 录CONTENT

文章目录

ECMASCript6 之 Parmameters and Arguments

2024-05-09 星期四 / 0 评论 / 0 点赞 / 81 阅读 / 3923 字

spread operator(...) 1 可以展开数组形参 例子: let myArr = [5,10,25];Math.max(myArr); //NaN,因为Math.max(); 不支持传

spread operator(...)  

1 可以展开数组形参

例子:

let myArr = [5,10,25];Math.max(myArr); //NaN,因为Math.max(); 不支持传入数组Math.max(...myArr);  //25,...myArr,将数组展开为多个形参

2 构造函数使用简便

new Date([2016,7,25]); //Mon Jul 25 2016 00:00:00 GMT+0800 (CST)

Rest Parameters

注意:rest parameter 必须是最后一个参数,而且只能有一个rest paramter

1 将参数转变为数组Array

例子:

function myFunction(...options) {     return options;}myFunction('a', 'b', 'c');   //["a", "b", "c"]
function checkSubstrings(string, ...keys) {  for (var key of keys) {    if (string.indexOf(key) === -1) {      return false;    }  }  return true;}checkSubstrings('this is a string', 'is', 'this');   // true

Default parameters

在ECMAScript 5中,默认的参数值一般这么构造,使用‘||’

function foo(param1, param2) {   param1 = param1 || 10;   param2 = param2 || 10;   console.log(param1, param2);}foo(5, 5);  // 5 5foo(5);    // 5 10foo();    // 10 10

在ECMAScript 6中,可以这么来用

function foo(a = 10, b = 10) {  console.log(a, b);}foo(5);    // 5 10foo(0, null);    // 0 null

Destructing

从Array或Object形参中抽出属性,赋值给变量

ECMAScript 5中

function initiateTransfer(options) {    var  protocol = options.protocol,        port = options.port,        delay = options.delay,        retries = options.retries,        timeout = options.timeout,        log = options.log;    // code to initiate transfer}options = {  protocol: 'http',  port: 800,  delay: 150,  retries: 10,  timeout: 500,  log: true};initiateTransfer(options);

在ECMAScript 6中,可以省去一大段代码

function initiateTransfer({protocol, port, delay, retries, timeout, log}) {     // code to initiate transfer};var options = {  protocol: 'http',  port: 800,  delay: 150,  retries: 10,  timeout: 500,  log: true}initiateTransfer(options);

但要注意,实参不能为空,否则会报错

function initiateTransfer({protocol, port, delay, retries, timeout, log}) {     // code to initiate transfer}initiateTransfer();  // TypeError: Cannot match against 'undefined' or 'null'

要解决这个问题,需要给形参赋初始值

function initiateTransfer({protocol, port, delay, retries, timeout, log} = {}) {     // code to initiate transfer}initiateTransfer();    // no error

或者,给每个抽取的参数赋值

function initiateTransfer({    protocol = 'http',    port = 800,    delay = 150,    retries = 10,    timeout = 500,    log = true}) {     // code to initiate transfer}

Mandatory Arguments

要求形参非空

function throwError() {    throw new Error('Missing parameter');}function foo(param1 = throwError(), param2 = throwError()) {    // do something}foo(10, 20);    // okfoo(10);   // Error: missing parameter

Arguments Object

类数组排序

function sort() {    var a = Array.from(arguments);    return a.sort();}sort(40, 20, 50, 30);    // [20, 30, 40, 50]

广告 广告

评论区