gpt4 book ai didi

具有多个参数的函数中的 Javascript 默认参数

转载 作者:搜寻专家 更新时间:2023-11-01 04:50:04 24 4
gpt4 key购买 nike

我有一个接受多个可选参数的函数。目前该函数没有按照我预期的方式分配默认值。

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 ),赋值运算符的工作方式是它分配值,操作的结果是分配的值。

要使用您的代码获取参数 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

Just for completeness, ES2015 (aka ES6) adds default argument values, but you still can't call the function the way you showed in your question. The ES2015 syntax does simplify the code in your function, though.

// ES2015+
function test1(arg1 = "arg1", arg2 = "arg2", arg3, arg4) {
// ....
}

不过,您在调用 时所做的仍然是相同的,仍然没有某些语言中的特殊“匹配名称”功能。

关于具有多个参数的函数中的 Javascript 默认参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33708413/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com