357

次のようなデフォルトパラメータを宣言できますか

function myFunc( a, b=0)
{
  // b is my optional parameter
}

JavaScriptで?

4

2 に答える 2

618

ES6の場合:これは言語の一部になりました

function myFunc(a, b = 0) {
   // function body
}

ES6は、真実性に対してではなく、値をチェックすることに注意してくださいundefined(したがって、実際の未定義の値のみがデフォルト値を取得します。nullなどの偽の値はデフォルトになりません)。


ES5の場合:

function myFunc(a,b) {
  b = b || 0;

  // b will be set either to b or to 0.
}

これは、明示的に渡すすべての値が真実である限り機能します。MiniGodのコメントによると真実ではない値:null, undefined, 0, false, ''

関数が実際に開始する前に、JavaScriptライブラリがオプションの入力に対して一連のチェックを実行するのを見るのはかなり一般的です。

于 2012-10-09T09:42:06.517 に答える
97

アップデート

ES6では、これはまさにあなたが説明した方法で可能です。詳細な説明は、ドキュメントに記載されています。

古い答え

JavaScriptのデフォルトパラメータは、主に次の2つの方法で実装できます。

function myfunc(a, b)
{
    // use this if you specifically want to know if b was passed
    if (b === undefined) {
        // b was not passed
    }
    // use this if you know that a truthy value comparison will be enough
    if (b) {
        // b was passed and has truthy value
    } else {
        // b was not passed or has falsy value
    }
    // use this to set b to a default value (using truthy comparison)
    b = b || "default value";
}

この式b || "default value"は、の値ANDを評価し、存在しないか偽の場合bの値を返します。"default value"b

代替宣言:

function myfunc(a)
{
    var b;

    // use this to determine whether b was passed or not
    if (arguments.length == 1) {
        // b was not passed
    } else {
        b = arguments[1]; // take second argument
    }
}

特別な「配列」argumentsは関数内で利用できます。インデックス0からN - 1N渡される引数の数)までのすべての引数が含まれます。

これは通常、(同じタイプの)不明な数のオプションのパラメーターをサポートするために使用されます。ただし、予想される引数を記載することをお勧めします。

さらなる考慮事項

ES5以降は書き込み可能undefinedではありませんが、一部のブラウザはこれを強制しないことが知られています。これが心配な場合は、次の2つの方法を使用できます。

b === void 0;
typeof b === 'undefined'; // also works for undeclared variables
于 2012-10-09T09:49:12.643 に答える