0

我的功能如下:

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有没有办法做到这一点?谢谢...

4

5 回答 5

0

您可以传递 dict 对象。在特定情况下,参数甚至可以为空,但在这种情况下,请像在您的帖子中一样检查它

function test(param) {
    default_values {
        'a':"default_a"
    }
    values = default_values.concat(param);
}

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

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

于 2013-06-06T10:44:43.980 回答
0

在 JavaScript 中提供默认参数的唯一方法是检查它们是否未定义,然后按照您在问题中已经说过的那样分配默认值。

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

于 2013-06-06T10:45:06.833 回答
0
var test = function(param1, param2, param3){
    this.param1 = param1 || "default value";
    this.param2 = param2 || "default value";
    this.param3 = param3 || "default value";
}

这?

于 2013-06-06T10:53:52.480 回答
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.将包含参数的类似对象传递给测试函数

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','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','');

使用带有参数名称的对象

test({p2589:'2589'});
于 2013-06-06T11:09:03.623 回答
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/

于 2013-06-06T12:41:04.643 回答