在函数中设置默认变量值

时间:2013-05-22 16:09:28

标签: javascript jquery

我正在做很多前端开发,我发现自己做了很多这样的事情:

function doSomething(arg){
    var int = arg ? arg : 400
    //some code after
}

所以我想知道这是否是一种方法,但更短更清洁(我不希望在同一行中看到arg两次)。

我见过有些人做过类似的事情:

var int = arg || 400;

由于我不知道我需要放置值,我尝试了arg || 400400 || arg,但它总是将int设置为右边的值,即使arg未定义。

我知道在PHP中你可以像function doSomething(arg = 400)那样设置一个默认值,在jQuery插件中你可以使用.extend()来设置默认属性,但是有一个简单的方法可以使用单个变量?或者我必须继续使用我的方式?

感谢您的帮助,如果您能给我资源,我们将不胜感激。

6 个答案:

答案 0 :(得分:15)

实际上没有比

更短的清洁方式
var int = arg || 400;

事实上,如果您希望允许arg作为0false""传递,那么正确的方法会更长:

var int = arg===undefined ? 400 : arg;

轻微而频繁的改进是不要声明一个新变量,而是使用原始变量:

if (arg===undefined) arg=400;

答案 1 :(得分:0)

function func(x,y){
   if(typeof(x)==='undefined') x = 10;
   if(typeof(y)==='undefined') y = 20;

   //code goes here
}

答案 2 :(得分:0)

您的解决方案的问题是评估为false的值(例如“false”或“0”)也会触发默认值。因此,对于每个可能具有计算结果为false的值的参数,您必须明确检查“未定义”。

var int = (typeof x === 'undefined') ? default : x

如果无法做到这一点,您可以使用

var int = x ? x : default
OR
var int = x || default

另一种选择是使用arguments数组并检查是否给出了参数。但是只有在可选参数是最后一个参数时才能使用。

function test(x, y) {
    var int1 = (arguments.length > 0) ? x : default;
    var int2 = (arguments.length > 1) ? y : default;
}

答案 3 :(得分:0)

与问题没有直接关系,但为什么要创建一个新变量来镜像参数?

在这种情况下,我会使用:

!arg && (arg = 400);

但是,这会测试arg的错误,这意味着值false0''nullundefined都会导致arg设置为400。如果这不是理想的结果,那么0的值可能是有效arg值,那么我通常会测试argument.length

function f (arg) {
  !arguments.length && (arg = 400);

检查是否传递了任何值,并且仅在调用完全没有参数的情况下设置arg

只有0不是所需值的特定实例才会使用构造

 arg || 400

再次遭受虚假测试

如果arg是数字很重要,您可以使用:

 typeof arg !== 'number' && (arg = 400);

这将确保arg是一个数字和其余代码。

总之:它取决于您想要如何使用参数,哪些值有效以及您对代码的调用者有多信任。

答案 4 :(得分:0)

我会检查arguments.length

var f = function(arg) {
  var myArg = arguments.length > 0 ? arg : 400;
};

答案 5 :(得分:0)

在ES6中,您可以像在PHP中一样设置参数的默认值:

function foo( a = [], b = 'string', c = false ){}

默认值也可以设置为前一个参数甚至是函数的返回值

function foo( a = true, b = a, c = bar() ){}

这也适用于ES6编译器。最终结果将如下所示

function foo() {
  var a = arguments.length <= 0 || arguments[0] === undefined ? true : arguments[0];
  var b = arguments.length <= 1 || arguments[1] === undefined ? a : arguments[1];
  var c = arguments.length <= 2 || arguments[2] === undefined ? bar() : arguments[2];
}