EDIT
this here is blazing fast as it changes only what it needs.
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'}));
this is one way to go
1.define your default params in defaulParams
2.pass to the test function a similar object containing the 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'}));
another way to write this if it does not work for you.
 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
 }
so now to extecute the function:
var anewlistofparams=test({p1:'1000',p3:'2000'})
or 
var ihavethisparams={p1:'1000',p3:'2000'};
var anewlistofparams=test(ihavethisparams);
.
.
wrong way ... don't do that ... BAD
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','','',''));
also the array way is bad....
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','','',''));
why??
because if u have may parameters u end up by sending something like this each time
test('','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','1','','','','','','','3','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','');
using object with it's param name 
test({p2589:'2589'});