JS中如何使用对象作为函数参数?
How to use an object as a function parameter in JS?
我创建了一个函数,该函数应该 return 一个包含用户数据的对象。我希望该函数接受一个对象作为参数,并且我希望在函数内部定义该对象,并将所有值预定义为默认参数,以防它们未在函数调用时传递。示例代码只有 2 个值,但我需要传递超过 15 个值。我怎样才能实现这样的解决方案?
const userCreator = (name, age) => {
if (name === undefined) {
name = 'John'
}
if (age === undefined) {
age = 25
}
return {
name:name,
age:age
}
};
您应该直接在函数参数中定义默认值:
const userCreator = (name = 'John', age = 25) => {
return {
name: name,
age: age
}
};
...and I'd like this object to be defined inside the function with all the values pre-defined as default parameters in case they are not passed at a function call.
我想你是在说:
- 您希望函数接受一个对象
- 您希望该对象的所有属性都是可选的,默认值由函数指定
为此,您可以使用解构默认值。但另请参阅下文,因为在这种 特定 情况下,您想要 return 一个对象,您可能需要使用不同的方法。
但是让我们从没有默认值的基本解构开始,然后添加它们:
const userCreator = ({ name, age }) => {
// ^−−−−−−−−−−−^−−−−−−−−−−−−−−−− destructuring
// ...stuff with `name` and `age` here...
return {
name,
age,
};
};
要为这些属性添加默认值,您可以在解构模式中添加它们({}
,否则参数名称将是):
const userCreator = ({ name = "John", age = 25, }) => {
// ^^^^^^^^^−−−−−^^^^^−−−− defaults for the properties
return {
name,
age,
};
};
如果有很多,最好分成几行:
const userCreator = ({
name = "John",
age = 25,
}) => {
return {
name,
age,
};
};
不过,该版本仍需要提供一个对象。如果要允许userCreator()
(完全不传参数),需要给object参数添加一个默认参数值:
const userCreator = ({
name = "John",
age = 25,
} = {}) => {
//^^^^−−−−−−−−−−−−−−−−−−−−−−−−−−− default for the parameter
return {
name,
age,
};
};
如果根本没有提供参数,则使用 {}
作为默认值,如果不提供 name
,则使用 "John"
作为默认值,而 25
作为如果未提供 age
,则为默认值。由于默认 {}
上没有 name
或 age
,因此当您执行 userCreator()
.
时它们会被默认
替代方法:
既然要return一个object,可以直接接受object参数,然后用属性spread或者Object.assign
填defaults,像这样:
const userDefaults = {
name: "John",
age: 25,
};
const userCreator = (template) => {
const result = { // The result object we'll return
...userDefaults, // Fill in defaults
...template // Overwrite with any properties from the caller
};
// Or with `Object.assign` in older environments without property spread:
//const result = Object.assign(
// {}, // The result object we'll return
// userDefaults, // Fill in defaults
// template // Overwrite with any properties from the caller
//);
return result;
};
属性spread和Object.assign
都忽略了null
或undefined
,所以如果根本没有传递任何对象,template
就是undefined
,以及
我创建了一个函数,该函数应该 return 一个包含用户数据的对象。我希望该函数接受一个对象作为参数,并且我希望在函数内部定义该对象,并将所有值预定义为默认参数,以防它们未在函数调用时传递。示例代码只有 2 个值,但我需要传递超过 15 个值。我怎样才能实现这样的解决方案?
const userCreator = (name, age) => {
if (name === undefined) {
name = 'John'
}
if (age === undefined) {
age = 25
}
return {
name:name,
age:age
}
};
您应该直接在函数参数中定义默认值:
const userCreator = (name = 'John', age = 25) => {
return {
name: name,
age: age
}
};
...and I'd like this object to be defined inside the function with all the values pre-defined as default parameters in case they are not passed at a function call.
我想你是在说:
- 您希望函数接受一个对象
- 您希望该对象的所有属性都是可选的,默认值由函数指定
为此,您可以使用解构默认值。但另请参阅下文,因为在这种 特定 情况下,您想要 return 一个对象,您可能需要使用不同的方法。
但是让我们从没有默认值的基本解构开始,然后添加它们:
const userCreator = ({ name, age }) => {
// ^−−−−−−−−−−−^−−−−−−−−−−−−−−−− destructuring
// ...stuff with `name` and `age` here...
return {
name,
age,
};
};
要为这些属性添加默认值,您可以在解构模式中添加它们({}
,否则参数名称将是):
const userCreator = ({ name = "John", age = 25, }) => {
// ^^^^^^^^^−−−−−^^^^^−−−− defaults for the properties
return {
name,
age,
};
};
如果有很多,最好分成几行:
const userCreator = ({
name = "John",
age = 25,
}) => {
return {
name,
age,
};
};
不过,该版本仍需要提供一个对象。如果要允许userCreator()
(完全不传参数),需要给object参数添加一个默认参数值:
const userCreator = ({
name = "John",
age = 25,
} = {}) => {
//^^^^−−−−−−−−−−−−−−−−−−−−−−−−−−− default for the parameter
return {
name,
age,
};
};
如果根本没有提供参数,则使用 {}
作为默认值,如果不提供 name
,则使用 "John"
作为默认值,而 25
作为如果未提供 age
,则为默认值。由于默认 {}
上没有 name
或 age
,因此当您执行 userCreator()
.
替代方法:
既然要return一个object,可以直接接受object参数,然后用属性spread或者Object.assign
填defaults,像这样:
const userDefaults = {
name: "John",
age: 25,
};
const userCreator = (template) => {
const result = { // The result object we'll return
...userDefaults, // Fill in defaults
...template // Overwrite with any properties from the caller
};
// Or with `Object.assign` in older environments without property spread:
//const result = Object.assign(
// {}, // The result object we'll return
// userDefaults, // Fill in defaults
// template // Overwrite with any properties from the caller
//);
return result;
};
属性spread和Object.assign
都忽略了null
或undefined
,所以如果根本没有传递任何对象,template
就是undefined
,以及