有没有更好的方法在JavaScript中执行可选函数参数?\[重复\]

JavaScript

ProTony

2020-03-10

我一直像这样处理JavaScript中的可选参数:

function myFunc(requiredArg, optionalArg){
  optionalArg = optionalArg || 'defaultValue';

  // Do stuff
}

有更好的方法吗?

有没有在这种情况下使用||会失败的情况?

第503篇《有没有更好的方法在JavaScript中执行可选函数参数?\[重复\]》来自Winter(https://github.com/aiyld/aiyld.github.io)的站点

5个回答
猴子村村 2020.03.10
function foo(requiredArg){
  if(arguments.length>1) var optionalArg = arguments[1];
}
神奇乐猪猪 2020.03.10
function Default(variable, new_value)
{
    if(new_value === undefined) { return (variable === undefined) ? null : variable; }
    return (variable === undefined) ? new_value : variable;
}

var a = 2, b = "hello", c = true, d;

var test = Default(a, 0),
test2 = Default(b, "Hi"),
test3 = Default(c, false),
test4 = Default(d, "Hello world");

window.alert(test + "\n" + test2 + "\n" + test3 + "\n" + test4);

http://jsfiddle.net/mq60hqrf/

Gil伽罗 2020.03.10

对undefined的测试是不必要的,并且没有那么健壮,因为如user568458所指出的,如果传递null或false,则提供的解决方案将失败。API的用户可能会认为false或null将迫使该方法避免使用该参数。

function PaulDixonSolution(required, optionalArg){
   optionalArg = (typeof optionalArg === "undefined") ? "defaultValue" : optionalArg;
   console.log(optionalArg);
};
PaulDixonSolution("required");
PaulDixonSolution("required", "provided");
PaulDixonSolution("required", null);
PaulDixonSolution("required", false);

结果是:

defaultValue
provided
null
false

后两个可能不好。而是尝试:

function bulletproof(required, optionalArg){
   optionalArg = optionalArg ? optionalArg : "defaultValue";;
   console.log(optionalArg);
};
bulletproof("required");
bulletproof("required", "provided");
bulletproof("required", null);
bulletproof("required", false);

结果是:

defaultValue
provided
defaultValue
defaultValue

唯一不理想的情况是,当您实际上具有旨在为布尔值或故意为null的可选参数时。

DavaidTony宝儿 2020.03.10

落到这个问题上,在EcmaScript 2015中搜索默认参数,因此仅提及...

使用ES6,我们可以执行默认参数

function doSomething(optionalParam = "defaultValue"){
    console.log(optionalParam);//not required to check for falsy values
}

doSomething(); //"defaultValue"
doSomething("myvalue"); //"myvalue"
LPro 2020.03.10

我习惯于在处理可选变量上看到一些基本的变化。有时,宽松版本很有用。

function foo(a, b, c) {
  a = a || "default";   // Matches 0, "", null, undefined, NaN, false.
  a || (a = "default"); // Matches 0, "", null, undefined, NaN, false.

  if (b == null) { b = "default"; } // Matches null, undefined.

  if (typeof c === "undefined") { c = "default"; } // Matches undefined.
}

a例如,与变量一起使用的默认值Backbone.js中得到了广泛使用

问题类别

JavaScript Ckeditor Python Webpack TypeScript Vue.js React.js ExpressJS KoaJS CSS Node.js HTML Django 单元测试 PHP Asp.net jQuery Bootstrap IOS Android