js函数参数的默认值都是undefined
, ES5里,不支持直接在形参里写默认值。因此,要设置默认值,就要检测参数是否为undefined
,按需求赋值。es6
function multiply(a, b) { b = typeof b !== 'undefined' ? b : 1; return a*b; } multiply(5); // 5 multiply(5, 0); // 0
上面是MDN的相关例子,是比较严谨的写法。不推荐下面的写法:ajax
function multiply(a, b) { b = b ? b : 1; // b = b || 1; return a*b; } multiply(5); // 5 multiply(5, 0); // 5
由于,在布尔类型环境中undefined
, 0
, ""
, NaN
, null
会被转换成 false
。async
进一步,还能够先利用arguments对象,再设置默认值 :ide
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还支持解构赋值来设置默认参数:ui
jQuery.ajax = function (url, { async = true, beforeSend = function () {}, cache = true, complete = function () {}, crossDomain = false, global = true, // ... more config }) { // ... do stuff };
更详细的介绍,请看阮一峰的ECMAScript 6 入门的函数的拓展。url