2010-09-03 88 views
5

我有,我想傳遞一個參數傳遞給函數,但是我希望它默認爲0。JavaScript函數變量預置

是否有可能待辦事項它類似於PHP,如:

function byMonth(export=0) { 

非常感謝

+2

不要使用'export'作爲標識符,因爲它是未來的保留字*,當這些關鍵字用作標識符時,某些實現會拋出'SyntaxError',Safari實現就是一個很好的例子。 – CMS 2010-09-03 17:37:28

回答

11

不這樣做

function byMonth(export){ 
    export = export || 0; 
    alert(export); 
} 

編輯:

以前的版本有一個沉默的錯誤,我要離開它,就像什麼不要做一個例子。

問題是,假設您將參數false傳遞給函數,它將採用默認值,儘管您實際使用參數調用它。

所有這些其他參數將被忽略,默認將使用

  • 數量爲零0
  • 空字符串(因爲falsy JavaScript的概念)""
  • NaN
  • false
  • null
  • 和(顯然)undefined

一個更安全的方式來檢查參數的存在是:

function byMonth(export){ 
     if(export === undefined) export = 0; 
    } 

編輯2

前面函數不是100 %安全,因爲某人(一個白癡)可能會定義undefined使功能出乎意料地行爲。這是最終的,適用任何地方,防彈版本:

function byMonth(export){ 
    var undefined; 
    if(export === undefined) export = 0; 
} 
+0

這實際上比@ Nick的回答更好,因爲你正在使用'var'。 – 2010-09-03 17:16:36

+2

@Jacob - 它被定義爲一個參數:) – 2010-09-03 17:16:56

+0

@Nick,是的,我想我害怕全局變量覆蓋。 – 2010-09-03 17:17:50

4

您可以設置默認的裏面,像這樣:

function byMonth(export) { 
    export = export || 0; 
    //your code 
} 
0

我6年多晚,但現在ES6,還有另一種解決方案。巴勃羅·費爾南德斯說,你可以設置undefined到一個值,你應該檢查是這樣的:

function byMonth(export){ 
    var undefined; 
    if(export === undefined) export = 0; 
} 

好了,現在你可以這樣做:

function byMonth(export){ 
    if(export === void 0) export = 0; 
} 

void 0始終計算爲「真正的」 undefined