这是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 } = {}) {
}
我能理解,但现在我很困惑。
答案 0 :(得分:9)
该功能将destructuring和default parameters混合在一起。
基于函数签名,我们可以说我们期待一个参数,它应该是一个对象。
function list(myObject) {
}
如果没有传递参数(或传递undefined
),我们将默认值设置为空对象{}
。
function list(myObject = {}) {
}
现在,无论我们传递一个对象,没有参数,或undefined
,myObject
都是一个对象。
// myObject will be {} for all 3 calls
list({})
list()
list(undefined);
接下来,我们通过从中提取myObject
和skip
对limit
进行解构:
function list(myObject = {}) {
let { skip, limit } = myObject;
}
此外,我们可以直接执行此解构而不是myObject
参数:
function list({ skip, limit } = {}) {
}
最后,如果我们最终得到的值不存在skip
或limit
,我们会给它们默认值:
function list({ skip = 0, limit = 50 } = {}) {
}
答案 1 :(得分:4)
该函数期望一个具有skip
和limit
属性的对象,并设置默认值(如果不存在)。请参阅下面的示例用法以更清楚地了解它
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 } = {}
的原因只是解构的一部分。 skip
和limit
是未命名对象的属性,因此允许人们在没有对象引用的情况下简单地获取属性的值。你可以说它们已被注入当前范围。当我们执行= {}
时,如果右侧对象(当前为空的对象)有一个名为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/