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