博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ECMASCript6 之 Parmameters and Arguments
阅读量:7176 次
发布时间:2019-06-29

本文共 2628 字,大约阅读时间需要 8 分钟。

hot3.png

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]

转载于:https://my.oschina.net/u/2510955/blog/717895

你可能感兴趣的文章
cve-2017-11882漏洞利用
查看>>
Android--UI之ImageSwitcher
查看>>
mbstring扩展导致中文乱码
查看>>
我们的移动混合开发之旅
查看>>
架构如何为业务和技术“服务”(2)
查看>>
Cool!!将图片转换为HTML图片
查看>>
CNN中的局部连接(Sparse Connectivity)和权值共享
查看>>
jquery-galleryview-2.0 漂亮多样化的图片特效(多项自定义)
查看>>
项目管理系列之质量管理(四)
查看>>
EBS - Low-level Diagnostic Logging is turned on
查看>>
[Sharepoint2007对象模型]第二回:Web应用程序服务(SPWebService)
查看>>
嵌入式linux系统中,lsusb出现unable to initialize libusb: -99 解决办法 【转】
查看>>
WinHEC上好玩的东西
查看>>
.NET Compact Framework 多线程环境下的UI异步刷新
查看>>
招聘:高级lamp的工程师、高级.net的软件工程师
查看>>
在两个有序的数组中找第N个数,二分查找 O(lgm+lgn)级
查看>>
AIO 简介
查看>>
如何查看oracle用户权限
查看>>
Android的init过程(二):初始化语言(init.rc)解析
查看>>
如何优雅地实现Python通用多线程/进程并行模块
查看>>