2012-10-16 93 views
3

我在這裏讀了一些問題,這一點:默認參數

  1. 這是一個好

    function(a, b) { 
        a = (typeof a === 'undefined')? 'default_val' : a; 
        b = (typeof b === 'undefined')? 'default_val' : b; 
    } 
    
  2. 這是有點麻煩(適用於任何東西,但布爾值)

    function(a, b) { 
        a = a || 'default_val'; 
        b = b || 'default_val'; 
    } 
    

    如果您通過false它會打破邏輯。所以這應該被標記爲一個壞習慣

  3. 有幾個問題,但我從來沒有見過這個答案(沒有人直接回答這個問題):這是(最後一種方法)好​​嗎?問題與它)?

    function(a = 'default_val', b = 'default_val') { 
        // your code 
    } 
    

我已經測試了這種方法3TH但找不到任何問題。我想要最後的方法。它更清潔,看起來更像其他語言的結構。

感謝

+2

#3在ES5中的語法無效。 –

+0

存在問題:您的第三條語句是無效聲明,您的函數從未定義過。 – Passerby

+0

函數(a ='default_val',b ='default_val')是語法錯誤 –

回答

1

第三個示例在大多數現代瀏覽器中在語法上不正確。目前它只能在FireFox中工作(這裏是一個固定的issue),因爲這個語法是尚未批准ECMAScript Harmony standard的一部分。

+0

現在有什麼改變,現在它的2013? –

+0

@GamesBrainiac真的沒有什麼改變。仍然只有FireFox支持這個功能(http://kangax.github.io/es5-compat-table/es6/)。我認爲只有在標準完成併發布後,瀏覽器開發人員纔會採用ECMAScript Harmony的大部分功能。 JS引擎比CSS複雜得多。因此,在不影響性能的情況下引入新的實驗性功能要困難得多。 – bjornd

2

在當前的ECMAScript實現是沒有辦法做到這一點像3. 我真的希望這樣了。 其在明年實施所謂的「和諧號」這裏提出更多關於它 http://wiki.ecmascript.org/doku.php?id=harmony:parameter_default_values

也僅僅排在我的腦海裏我是如何真正做這件事。一般我傳遞一個參數作爲實例的對象,

變種選項= {X:20,Y:30}

然後我做在函數

function iAcceptDefaults(options) { 
    var defaults = { 
     x: 40 
    } 
    var newParameters = $.extend({},options, defaults) // here we using jQuery method extend to mix defaults parameters with options 

} 
+1

所以你的建議是使用jQuery來獲得JS的一些語法糖?恕我直言,不是很聰明。 – bjornd

+0

我同意bjornd。使用jQuery方法(或任何其他庫)來解決這個問題是一個否NO – Symba

+0

你可以很容易地使它沒有jQuery隊友,它只是一個例子,使用谷歌找出$。擴展替代 – RomanTheGreat