ES6中参数的默认值

时间:2017-06-12 04:02:37

标签: javascript ecmascript-6

这是es6中参数的默认值吗?

HttpWebRequest anotherWR = HttpWebRequest.Create("https://www.fshare.vn/login") as HttpWebRequest;
anotherWR.UserAgent = "Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.84 Safari/537.36";
anotherWR.Method = "POST";
anotherWR.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
anotherWR.KeepAlive = true;
anotherWR.ContentType = "application/x-www-form-urlencoded";
Stream stream = wr.GetRequestStream();
stream.Write(postDatabyte, 0, postDatabyte.Length);
stream.Close();

...
...
...
//and your logic...

上面的代码是做什么的?

如果是function list({ skip = 0, limit = 50 } = {}) { } 我能理解,但现在我很困惑。

3 个答案:

答案 0 :(得分:9)

该功能将destructuringdefault parameters混合在一起。

基于函数签名,我们可以说我们期待一个参数,它应该是一个对象。

function list(myObject) {

}

如果没有传递参数(或传递undefined),我们将默认值设置为空对象{}

function list(myObject = {}) {

}

现在,无论我们传递一个对象,没有参数,或undefinedmyObject都是一个对象。

// myObject will be {} for all 3 calls
list({})
list()
list(undefined);

接下来,我们通过从中提取myObjectskiplimit进行解构:

function list(myObject = {}) {
  let { skip, limit } = myObject;
}

此外,我们可以直接执行此解构而不是myObject参数:

function list({ skip, limit } = {}) {

}

最后,如果我们最终得到的值不存在skiplimit,我们会给它们默认值:

function list({ skip = 0, limit = 50 } = {}) {

}

答案 1 :(得分:4)

该函数期望一个具有skiplimit属性的对象,并设置默认值(如果不存在)。请参阅下面的示例用法以更清楚地了解它



function list({ skip = 0, limit = 50 } = {}) {
  console.log(skip);
  console.log(limit);
}

// No args
list();

// skip changed. Note the object
list({skip: 2});

// limit changed. Note the object
list({limit: 2});




答案 2 :(得分:4)

它被称为解构,如果你遇到= {},理解它可能会很棘手。

这与es5相同:

function list() {
  var opts = arguments[0] === undefined ? {} : arguments[0];
  var skip = opts.skip === undefined ? 0 : opts.skip;
  var limit = opts.limit === undefined ? 50 : opts.limit;
}

这对于传递配置对象非常有用,使我们不必使用x == undefined ? foo : bar的长列表。

执行{ skip = 0, limit = 50 } = {}的原因只是解构的一部分。 skiplimit是未命名对象的属性,因此允许人们在没有对象引用的情况下简单地获取属性的值。你可以说它们已被注入当前范围。当我们执行= {}时,如果右侧对象(当前为空的对象)有一个名为skip的密钥,那么左侧的skip将获得{的skip新值{1}}在右侧。同样适用于limit。但由于右侧的对象没有左侧属性名称对应的属性,因此左侧属性保持不变。此外,= {}的使用是为了让我们可以在没有任何参数的情况下调用此方法,因此函数将其默认参数作为参数。

如果仍然对此感到困惑,请记住= {}的唯一原因是作为函数的默认参数,它允许我们在没有参数的情况下调用函数。而且,由于所述原因,它不会影响该表达式左侧的值。

<强>参考文献:

https://simonsmith.io/destructuring-objects-as-function-parameters-in-es6/ https://hacks.mozilla.org/2015/05/es6-in-depth-destructuring/