js函数参数的默认值都是undefined
,ES5不支持直接在形参里写默认值,所以,要设置默认值就需要首先检测传入的参数是否为undefined
,然后在根据功能需要对参数进行赋值。
MDN对函数设置默认值给出了样例:
function multiply(a, b) {
b = typeof b !== 'undefined' ? b : 1;
return a*b;
}
multiply(5); // 5
multiply(5, 0); // 0
这种方法是严谨的,最好不要使用下面的写法:
function multiply(a, b) {
b = b ? b : 1; // b = b || 1;
return a*b;
}
multiply(5); // 5
multiply(5, 0); // 5
以上方法在处理值为0的参数时,会默认把值转换成false
,其他一些值,如:undefined
''
NaN
null
也会出现这种情况。
另外,也可以使用arguments
对象设置默认值。
function multiply(a) {
var b = typeof arguments[1] !== 'undefined' ? arguments[1] : 1;
return a*b;
}
multiply(5); // 5
multiply(5, 0); // 0
目前的ES6已经支持默认参数,直接在形参上添加就可以了。
function multiply(a, b = 1) {
return a*b;
}
multiply(5); // 5
ES6还支持结构赋值来设置默认参数:
jQuery.ajax = function (url, {
async = true,
beforeSend = function () {},
cache = true,
complete = function () {},
crossDomain = false,
global = true,
// ... more config
}) {
// ... do stuff
};
我来说两句