32

質問

オプションのパラメータにデフォルト値を割り当てる良い方法は何ですか?

バックグラウンド

私は JavaScript でオプションのパラメーターをいじっており、パラメーターが指定されていない場合にデフォルト値を割り当てるという考えがあります。問題の私のメソッドは 2 つのパラメーターを受け入れます。後者はオプションであると考えており、指定されていない場合はデフォルトでfalse. 私の方法は次のようになります...

// selects the item, appropriately updating any siblings
// item to select [, toggle on / off]
this.selectItem = function(item, toggle)
{
    toggle = toggle && typeof toggle === 'boolean';
    if (toggle)
    {
       // ...
    }
}

テスト

この jsFiddleでいくつかのテストを実行した後、デフォルト値の割り当てに次のプリンシパルを使用します。

function checkParamIsBoolean(param)
{
    param = param && typeof param === 'boolean';
}

checkParamIsBoolean('me'); // boolean
checkParamIsBoolean([]); // boolean
checkParamIsBoolean(true); // boolean
checkParamIsBoolean(false); // boolean
checkParamIsBoolean(1 == 1); // boolean
checkParamIsBoolean(1); // boolean
checkParamIsBoolean(null); // object
checkParamIsBoolean(undefined); // undefined
​

可能な限り、結果はさまざまであり、望ましくありません。

期待される

null= false
undefined=false

実際

null= object
undefined=undefined

概要

指定されていない場合、オプションのパラメーターにデフォルト値を割り当てる代替アプローチはありますか? _toggleパラメータとして使用し、メソッド内で値を割り当てる方がよいでしょうvar toggleか?

4

9 に答える 9

23

より良い解決策は、オブジェクトにラップされた名前付き引数を使用することです。コードをきれいに保ち、複雑な関数 (多くのデフォルトおよびデフォルト以外の引数を持つ) の場合のエラーを防ぎます。それ以外の場合は、引数の順序を覚えて、存在する引数のタイプに基づいてデフォルト値を割り当てる必要があります (それがあなたがやろうとしていることです)。

このメソッドは、パラメーターjQuery および jQuery のプラグインを渡す主要な方法です。

function test(options) { 

  // set up default options 
  var defaults = { 
    param1:      'test', 
    param2:      100
  }; 

  // combine options with default values
  var options = $.extend({}, defaults, options); // If you're not using jQuery you need different function here

  alert(options.param1)
  alert(options.param2)

}

test({'param2': 200}) // Call the function with just the second param
于 2012-06-14T09:24:00.770 に答える
14

この構造は、コード内のオプションのパラメーターに使用できます。

//...
optionalParam = optionalParam || 'some default value';

具体的な例では、次のようになります。

this.selectItem = function(item, toggle)
{
    toggle = toggle || false;
   // ...
}

しかし、あなたの場合、toogle (オプションのパラメーター) を if ステートメントで直接使用できます (その存在を確認したいだけなので。または、オプションで、このようなブール値を強制することもできますtoogle = !!toogle(二重否定)。

于 2012-06-14T09:30:05.383 に答える
1

null(および引数が渡されていない)undefinedおよび""(空の文字列)を「関数に引数が渡されていない」と見なす場合は、次のステートメントを使用します。

toggle = toggle&&toggle||default_value

nullここで、undefinedまたはをarg""として関数に渡すと、この行は で埋められます。toggledefault_value

于 2012-06-14T10:12:52.293 に答える
1

交換できます

param = param && typeof param === 'boolean';

param = !!(param && typeof param === 'boolean');

これにより、ステートメントの結果がブール値の否定に変換され、再び否定されます。

于 2012-06-14T09:24:37.633 に答える
0

jQuery 拡張と、それらがオプションのパラメーターを処理する方法を見てみましょう。

于 2012-06-14T09:28:28.503 に答える