Javascript 多参数函数中的默认参数
Javascript default parameters in functions with multiple arguments
我有一个带有多个可选参数的函数。目前该函数没有按照我期望的方式分配默认值。
var test1 = function(arg1, arg2, arg3, arg4) {
arg1 = arg1 || "arg1";
arg2 = arg2 || "arg2";
var obj = {
arg1: arg1,
arg2: arg2,
arg3: arg3,
arg4: arg4
};
return(obj);
};
var obj1 = test1(arg3 = "notarg1", arg4 = "notarg2"); // Why are these values assigned to arg1 & arg2 instead of 3 & 4?
console.log(obj1);
我不明白这个。 Javascript 似乎忽略了我的 (arg3 = "notarg1", arg4 = "notarg2")
作业,而是表现得好像 (arg1 = "notarg1", arg2 = "notarg2", arg3 = undefined, arg4 = undefined)
是我的输入。
var test2 = function(arg1, arg2, arg3, arg4) {
if (arg1 === null) {
arg1 = "arg1";
}
if (arg2 === null || arg2 === "undefined") {
arg2 = "arg2";
}
var obj = {
arg1: arg1,
arg2: arg2,
arg3: arg3,
arg4: arg4
};
return(obj);
};
var obj2 = test2(arg3 = "notarg1", arg4 = "notarg2")
console.log(obj2);
我不确定这是否值得包括在内。情况没有改变。
JavaScript 没有命名您在 调用 函数时指定的参数的功能,所以这一行:
var obj1 = test1(arg3 = "notarg1", arg4 = "notarg2");
...并不像您认为的那样。它这样做:
arg3 = "notarg1";
arg4 = "notarg2";
var obj1 = test1("notarg1", "notarg2");
例如,函数调用中的 arg3 = "notarg1"
只是对变量的赋值(在本例中,可能是 implicit global),赋值运算符的工作方式是将value 和操作的结果是分配的值。
要使用您的代码获取参数 1 和 2 的默认值,您必须指定 undefined
:
var obj1 = test1(undefined, undefined, arg3, arg4);
在那里,你 指定了参数 1 和 2,但是你给它们的值是假的,所以你的函数的 arg1 = arg1 || "arg1"
将采用 "arg1"
(对于 arg2 也类似)。
如果您有超过三个参数,您可能会考虑使用选项对象:
function test1(options) {
var arg1 = options.arg1 || "arg1";
var arg2 = options.arg2 || "arg2";
var arg3 = options.arg3 || "arg3";
var arg4 = options.arg4 || "arg4";
console.log(arg1, arg2, arg3, arg4)
}
test({arg3: "notarg1", arg4: "notarg2"});
输出:
arg1, arg2, notarg1, notarg2
为了完整起见,ES2015(又名 ES6)添加了默认参数值,但您仍然无法 调用 您在问题中显示的方式的函数。不过,ES2015 语法确实简化了函数中的代码。
// ES2015+
function test1(arg1 = "arg1", arg2 = "arg2", arg3, arg4) {
// ....
}
同样,调用 时所做的操作是一样的,仍然没有某些语言中的特殊 "matching up the names" 功能。
更好的方法是将对象传递给函数。这样你就不用担心遗漏参数了。
var test1 = function(options) {
var arg1 = options.arg1 || "arg1";
var arg2 = options.arg2 || "arg2";
...
};
var obj1 = test1({ arg1: "notarg3", arg2: "notarg1" });
我有一个带有多个可选参数的函数。目前该函数没有按照我期望的方式分配默认值。
var test1 = function(arg1, arg2, arg3, arg4) {
arg1 = arg1 || "arg1";
arg2 = arg2 || "arg2";
var obj = {
arg1: arg1,
arg2: arg2,
arg3: arg3,
arg4: arg4
};
return(obj);
};
var obj1 = test1(arg3 = "notarg1", arg4 = "notarg2"); // Why are these values assigned to arg1 & arg2 instead of 3 & 4?
console.log(obj1);
我不明白这个。 Javascript 似乎忽略了我的 (arg3 = "notarg1", arg4 = "notarg2")
作业,而是表现得好像 (arg1 = "notarg1", arg2 = "notarg2", arg3 = undefined, arg4 = undefined)
是我的输入。
var test2 = function(arg1, arg2, arg3, arg4) {
if (arg1 === null) {
arg1 = "arg1";
}
if (arg2 === null || arg2 === "undefined") {
arg2 = "arg2";
}
var obj = {
arg1: arg1,
arg2: arg2,
arg3: arg3,
arg4: arg4
};
return(obj);
};
var obj2 = test2(arg3 = "notarg1", arg4 = "notarg2")
console.log(obj2);
我不确定这是否值得包括在内。情况没有改变。
JavaScript 没有命名您在 调用 函数时指定的参数的功能,所以这一行:
var obj1 = test1(arg3 = "notarg1", arg4 = "notarg2");
...并不像您认为的那样。它这样做:
arg3 = "notarg1";
arg4 = "notarg2";
var obj1 = test1("notarg1", "notarg2");
例如,函数调用中的 arg3 = "notarg1"
只是对变量的赋值(在本例中,可能是 implicit global),赋值运算符的工作方式是将value 和操作的结果是分配的值。
要使用您的代码获取参数 1 和 2 的默认值,您必须指定 undefined
:
var obj1 = test1(undefined, undefined, arg3, arg4);
在那里,你 指定了参数 1 和 2,但是你给它们的值是假的,所以你的函数的 arg1 = arg1 || "arg1"
将采用 "arg1"
(对于 arg2 也类似)。
如果您有超过三个参数,您可能会考虑使用选项对象:
function test1(options) {
var arg1 = options.arg1 || "arg1";
var arg2 = options.arg2 || "arg2";
var arg3 = options.arg3 || "arg3";
var arg4 = options.arg4 || "arg4";
console.log(arg1, arg2, arg3, arg4)
}
test({arg3: "notarg1", arg4: "notarg2"});
输出:
arg1, arg2, notarg1, notarg2
为了完整起见,ES2015(又名 ES6)添加了默认参数值,但您仍然无法 调用 您在问题中显示的方式的函数。不过,ES2015 语法确实简化了函数中的代码。
// ES2015+
function test1(arg1 = "arg1", arg2 = "arg2", arg3, arg4) {
// ....
}
同样,调用 时所做的操作是一样的,仍然没有某些语言中的特殊 "matching up the names" 功能。
更好的方法是将对象传递给函数。这样你就不用担心遗漏参数了。
var test1 = function(options) {
var arg1 = options.arg1 || "arg1";
var arg2 = options.arg2 || "arg2";
...
};
var obj1 = test1({ arg1: "notarg3", arg2: "notarg1" });