vanoha, потому что Вы не правильно делаете проверку на undefined, в Вашем случае Вы пытаетесь сравнить со строкой "undefined".
Проще так:
for(var s in defaults){
param[s] = param[s] || defaults[s];
}
Ну а если именно на undefined, то:
for(var s in defaults){
if(!(s in param)) param[s] = defaults[s];
}