js中对函数设置默认参数值

对函数参数设置默认值,本质就是判断是否传入参数或者参数是否为空。

一般而言,最简单的就是下面的方法:

function example(name,age){ 
  name=name||'貂蝉'; 
  age=age||21; 
  alert('你好!我是'+name+',今年'+age+'岁。'); 
}

该函数也可以写作如下:

function example(name,age){ 
  if(!name){name='貂蝉';} 
  if(!age){age=21;} 
  alert('你好!我是'+name+',今年'+age+'岁。'); 
}

或者

function example(a,b){ 
  var a = arguments[0] ? arguments[0] : 1;//设置参数a的默认值为1 
  var b = arguments[1] ? arguments[1] : 2;//设置参数b的默认值为2 
  return a+b; 
}

这个思路需要注意,是否需要区分 undefined, null 以及 其他可以转为 false 的值。

另一种思路,适合用于参数较多的情况。

可以使用 Object.assign 方法:

const object1 = {
  a: 1,
  b: 2,
  c: 3
};

function abc(object1){
  const object2 = Object.assign({c: 4, d: 5}, object1);
  console.log(object2.a, object2.c, object2.d); // 1 3 5
}

但 Object.assgn 要注意兼容性问题。同时,也要注意,这个方法不能实现完全的深层复制,只能完成对对象第一层属性的覆盖,同时,如果值为显式赋值的 null 或者 undefined,也能够用于覆盖原本的值:

const object1 = {
  a: 1,
  b: 2,
  c: 3
};


function abc(object1){
  object1.c = false;
  object1.d = undefined;
  const object2 = Object.assign({c: 4, d: 5}, object1);
  console.log(object2.a, object2.c, object2.d); // 1 false undefined
}

也可以使用Jquery的扩展:

var object1 = {
  a: 1,
  b: 2,
  c: 3
};

function example(setting){ 
  var object1 = {
    a: 1,
    b: 2,
    c: 3
  };
  $.extend(object1,settings); 
}

$.extend 函数本身可以作为一个工具函数,处理对象的合并,语法 jQuery.extend([deep], target, object1, [objectN]),这个函数会判断第一个参数是否是一个 Boolean 值(可选),如果是,则进行深拷贝,如果不是,则进行浅拷贝。然后根据除了 Boolean 值之外的其他参数的个数,判断是否是添加插件,如果剩余参数不止一个,则第一个作为 target,其他对象的属性将会复制到 target 上,而如果只有一个参数,则会将这个参数对象的方法添加到 jQuery 对象上,或者 jQuery.fn 上,根据调用函数的对象不同决定。

然后,es6 的函数提供了一种新的添加默认函数的方法:

function multiply(a, b = 1) {
  return a*b;
}

multiply(5); 
// 5

使用默认参数,在函数体的检查就不再需要了。

资料:
js中对函数设置默认参数值的3种方法
JavaScript 复制对象【Object.assign方法无法实现深复制】
MDN Object.assign()
JavaScript—函数参数:默认参数和剩余参数
jQuery 学习笔记:jQuery 代码结构

猜你喜欢

转载自blog.csdn.net/agyyl0/article/details/80306286