2013-12-15 61 views
0

在PHP中,我們可以爲這些功能定義的參數值,如果它沒有設置(叫),因此,例如:默認值 - 的JavaScript

<?php 
    function blah($arg = false){ 
     var_dump($arg); 
    } 
?> 

在上面的例子,如果我們調用的功能等:

<?php 
    blah(); 
    // ==> out put will be: false; 
    blah(true); 
    // ==> out put will be: true; 
?> 

所以,如果他們不解決,而我們調用的函數,這到底是怎麼來的JavaScript函數實現的,我們可以定義參數的值?

我把它完全像PHP:

<script> 
    function blah(arg = false){ 
     //... 
    } 
</script> 

上面的代碼工作在Mozilla Firefox就好了,但是在Chrome中,功能無法正常工作,並得到固定,當我在括號去掉= false,Chrome開發者工具說:

Uncaught Syntax Error: Unexpected token =

+3

[默認參數](https://開頭開發商.mozilla.org/en-US/docs/Web/JavaScript/Reference/default_parameters)是ECMAScript 6的一部分。目前,[只有FF](https://developer.mozilla.org/en-US/docs /我們b/JavaScript/ECMAScript_6_support_in_Mozilla)支持一些新功能。 – Teemu

回答

2

這是在JavaScript實現默認參數IMO最乾淨的模式。

function (arg) { 
    arg = arg || 'defaultVale'; 
} 

但是如果你希望arg的值是一些falsy值,e.g 0, false, NaN, null使用它並不推薦這可能會失敗。

此版本通過與undefined進行明確比較來防範此情況。

function (arg) { 
    arg = arg === undefined ? 'defaultVale' : arg; 
    // As T.J Crowder pointer out if not in strict mode or if the code will run 
    // in an IFrame use typeof arg === "undefined" instead of directly 
    // comparing with undefined 
} 

另一個不錯的模式是用對象代替參數。這有兩個好處

  1. 的參數順序並不重要
  2. 可以很容易地實現默認參數

代碼

var defaults = { 
    arg1: 10, 
    arg2: 20 
}; 

var f = function (args) { 
    args = jQuery.extend(true, args, defaults); //jQuery 
    args = _.defaults(args, defaults); // Underscore 
}; 

f({ 
    a: 25 //Use a non default value 
}); 
+0

注意'undefined'可以被遮蔽,並且一個窗口中的undefined不是'==='另一個窗口中的undefined',所以如果你正在編寫任何可能用於多幀的代碼環境,那檢查是一個壞主意。 'typeof arg ===「undefined」'是可靠的。 –

+0

@ T.J.Crowder非常好的一點T.J,但這在嚴格模式下是不可能的。無論如何他都應該使用「嚴格模式」。 –

+0

@ Hugo:嚴格模式對多窗口(框架)的情況沒有影響。 –

3

這是不可能的Javascript。 試試這個Conditional Operator語句來代替:

<script> 
    function blah(arg){ 
     arg = typeof arg !== 'undefined' ? arg : 'someValue'; 
    } 
</script> 

其中「someValue中」是默認值,當沒有傳遞給blah()函數的參數變量arg會得到。

+0

我認爲arg!== undefined也可以做到 – xpy

+1

@xpy:小心這樣做。 'undefined'在一個窗口中不是'===''undefined'在另一個窗口中,所以如果你正在做一個圖書館或任何類型的應用程序與多個窗口(框架)... –

+0

@TJCrowder謝謝你的提示。 –

0

在JavaScript中沒有默認參數。 就寫這樣的代碼:

function test(arg) { 
    if(arg) { 
     // do something as arg is defined. 
    } else { 
     // do something as arg is undefined. 
    } 
} 

test(true); // arg is defined 
test(); // arg is undefined 
0

JS中,你不能有參數的缺省值。您可以檢查數據是已知類型的有typeof操作:

function blah(arg) 
{ 
    if (typeof arg === 'undefined') 
    { 
     arg = false; 
    } 
} 

或短路設置了他的價值的方式

function blah(arg) 
{ 
    arg = arg || false; 
} 

例如,在CoffeeScript中,你可以通過使用

設置

blah = (arg = "mydefaultvalue") ->

被翻譯成

blah = function(arg) 
{ 
    if (arg == null) 
    { 
     arg = "mydefaultvalue"; 
    } 
} 
0

簡單變化

function defaulter(p1) { 
    p1 = p1 || "default"; 
} 
+3

這應該**不推薦**。如果用戶明確地將'p1'的虛假值傳遞給它,它將仍然使用'default' – thefourtheye

+0

或者'''''','NaN','null','false' ...這裏有一個地方,但只有非默認值不會有錯。沒有一個明確的描述,說「只是做這個」是沒有用的。 –

+1

@ T.J.Crowder我只是將它改爲falsy值:) – thefourtheye