Javascript 以这种方式传递论点意味着什么?

Javascript 以这种方式传递论点意味着什么?,javascript,express,Javascript,Express,我正在学习javascript,我看到了这段我不理解的代码: exports.configure = ({ expressapp = null, userdb = null, path = '/myroute' } = {}) => { // handle routes }; 我最困惑的是被传递的论点的结构以及里面发生了什么。我在哪里可以找到更多关于这方面的信息,以便我可以阅读它?当你传递这样的参数时,它叫什么?为什么要这样做?该模式是一种解构赋值,它指定一个普

我正在学习javascript,我看到了这段我不理解的代码:

exports.configure = ({
   expressapp = null,
   userdb = null,
   path = '/myroute'
} = {}) => { 
   // handle routes
};

我最困惑的是被传递的论点的结构以及里面发生了什么。我在哪里可以找到更多关于这方面的信息,以便我可以阅读它?当你传递这样的参数时,它叫什么?为什么要这样做?

该模式是一种解构赋值,它指定一个普通对象作为默认参数,以避免在没有值传递给函数时出现
TypeError

const exports={};
exports.configure=({
expressapp=null,
userdb=null,
路径='/myroute'
}) => { 
//处理路线
console.log(expressapp)
};
试一试{
exports.configure();
}捕捉(错误){
控制台错误(err)

}
这与写作相同

exports.configure=(参数={})=>{
//处理路线

};有关更多信息,请阅读本页:

基本上如果我们分配

var [a,b] = [2,3]; 
var {a: x, b: y} = {a: 3, b: 4} 
我们得到a=2和b=3是有道理的。把它想象成一面镜子

如果我们指定

var [a,b] = [2,3]; 
var {a: x, b: y} = {a: 3, b: 4} 
x=3和y=4是有道理的 (因为{a:x,b:y}上的'a'位置被x占据,{a:3,b:4}上的'a'位置被3占据,所以将3分配给x是合乎逻辑的。)

A) 这可以扩展到函数参数,我们可以

function myFunc({a:x, b:y}){//do stuff}
调用myFunc({a:3,b:4})意味着x=3,y=4


B) 我们现在问自己为什么需要引入x和y。相反,我们可以

function myFunc({a:a, b:b}){//do stuff}
调用myFunc({a:3,b:4})意味着a=3,b=4


C) 如果我们丢失了信息怎么办?那我们就可以做了

function myFunc({a:a = 1, b:b = 2}){// do stuff}
现在调用myFunc({b:4})意味着a=1,b=4
调用myFunc({})意味着a=1,b=2<因为你可以把{}看作{a:未定义,b:未定义}


D) 如果整个参数(整个对象)丢失了怎么办?这是完全不同的事情,会导致错误。为了回答这个问题,让我们做一个简单的例子

function simple(a=3){//do stuff};
调用simple()将触发默认参数,这意味着a=3

回到更复杂的函数,我们可以写

function myFunc({a:a = 1, b:b = 2} = {}){// do stuff}
类似地,调用myFunc()将触发默认参数,这意味着

{a:a = 1, b:b = 2} = {}
你可以把它想象成

{a:a = 1, b:b = 2} = {a: undefined, b: undefined}
这使得“a”未定义,而“b”未定义,从而触发默认参数,这意味着a=1,b=2


E) 现在我们来介绍一种速记法

var {a:a} = {a:3}

var {a} = {a: 3}
回到我们的函数,我们可以看到

function myFunc({a:a = 1, b:b = 2} = {}){// do stuff}
相当于

function myFunc({a = 1, b = 2} = {}){// do stuff}
这没有添加任何功能,只是清理了一些东西