是否有一个解决方案,以最好的方式在JavaScript中制作可选参数?

时间:2013-06-06 10:38:19

标签: javascript

我的功能如下:

function test(param1, param2, param3, param4, param5, param6, param7, param8){
    if(param1 === undefined)
        param1 = "1";
    if(param2 === undefined)
        param2 = "2";
    etc........................
}

我想在调用函数时创建像test(param1=2, param6=7)这样的东西然后自动所有其他的undefined是否有办法做到这一点? 谢谢......

5 个答案:

答案 0 :(得分:0)

你可以传递dict对象。在特殊情况下,参数甚至可以为空,但在这种情况下,请在帖子

中进行检查
function test(param) {
    default_values {
        'a':"default_a"
    }
    values = default_values.concat(param);
}

test({});
test({
    'b':"value_b",
});

这是非常常见的解决方案。

答案 1 :(得分:0)

在JavaScript中提供默认参数的唯一方法是检查它们是否未定义,然后按照您在问题中所述的方式分配默认值。

但如果您想明确传递未定义的值,这将无济于事。

答案 2 :(得分:0)

var test = function(param1, param2, param3){
    this.param1 = param1 || "default value";
    this.param2 = param2 || "default value";
    this.param3 = param3 || "default value";
}

此?

答案 3 :(得分:0)

修改

这里的速度非常快,因为它只会改变它所需要的东西。

function test(a){
 var p={p1:'1',p2:'2',p3:'3',p4:'4',p5:'5',p6:'6'}
 for(var b in a){p[b]=a[b]}return p;
} 
console.log(test({p1:'1000',p3:'2000'}));

这是一种方法

1.在defaulParams中定义默认参数

2.将包含params的类似对象传递给测试函数

var
defaultParams={p1:'1',p2:'2',p3:'3',p4:'4',p5:'5',p6:'6'},
test=function(a){
 var myparams={}
 for(var b in defaultParams){
  myparams[b]=a[b]||defaultParams[b];
 }
 return myparams
}
console.log(test({p1:'1000',p3:'2000'}));

如果它不适合你的另一种写法。

 function test(a){
  var defaultParams={p1:'1',p2:'2',p3:'3',p4:'4',p5:'5',p6:'6'},myparams={};
  for(var b in defaultParams){
   myparams[b]=a[b]||defaultParams[b];
  }
  return myparams
 }

所以现在要扩展这个功能:

var anewlistofparams=test({p1:'1000',p3:'2000'})

var ihavethisparams={p1:'1000',p3:'2000'};
var anewlistofparams=test(ihavethisparams);

错误的方式......不要这样做......坏了

var
test=function(){
 var defaultParams={p1:'1',p2:'2',p3:'3',p4:'4',p5:'5',p6:'6'},myparams={};
 for(var a=0,b=arguments.length;a<b;a++){
  myparams['p'+(a+1)]=(arguments[a]!=''?arguments[a]:defaultParams['p'+a]);
 }
 return myparams
}

console.log(test('1000','','2000','','',''));

阵列方式也不好....

var
test=function(){
 var defaultParams={p1:'1',p2:'2',p3:'3',p4:'4',p5:'5',p6:'6'},myparams=[];
 for(var a=0,b=arguments.length;a<b;a++){
  myparams[a]=(arguments[a]!=''?arguments[a]:defaultParams['p'+a]);
 }
 return myparams
}

console.log(test('1000','','2000','','',''));

为什么?

因为如果你有参数,你可以通过每次发送类似的东西来结束

test('','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','1','','','','','','','3','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','');

使用带有param名称的对象

test({p2589:'2589'});

答案 4 :(得分:0)

您可以将对象作为参数传递给函数;你甚至可以使用一个构造函数来为你提供一个具有默认值的对象,比如...

var DefaultArguments = function() {
    this.hello = 'Hello'
    this.world = 'world'
};

var myFunction = function(object) {
    return object.hello + ' ' + object.world + '!';
};


var newArguments1 = new DefaultArguments();
newArguments1.hello = 'Goodbye';
alert(myFunction(newArguments1));

var newArguments2 = new DefaultArguments();
newArguments2.world = 'Mars';
alert(myFunction(newArguments2));

http://jsfiddle.net/5qNXL/