ホームページ  >  記事  >  ウェブフロントエンド  >  Javascriptのデフォルトパラメータを詳しく解説_基礎知識

Javascriptのデフォルトパラメータを詳しく解説_基礎知識

WBOY
WBOYオリジナル
2016-05-16 16:33:151109ブラウズ

Ruby、CoffeeScript、今後の JavaScript バージョンなどの一部の言語では、関数を定義するときに次のようにデフォルトのパラメーターを宣言できます。

コードをコピーします コードは次のとおりです:

function myFunc(param1, param2 = "2 番目の文字列") {
console.log(param1, param2);
}

// 出力: "最初の文字列" と "2 番目の文字列"
myFunc("最初の文字列");

// 出力: "最初の文字列" と "2 番目の文字列バージョン 2"
myFunc("最初の文字列", "2 番目の文字列バージョン 2");

残念ながら、現在のバージョンのJavaScriptではこの書き方は無効です。では、既存のツールセットを使用してこれを達成するにはどうすればよいでしょうか?

最も簡単な解決策は次のとおりです:

コードをコピーします コードは次のとおりです:

function myFunc(param1, param2) {
If (param2 === 未定義) {
param2 = "2 番目の文字列";
}

console.log(param1, param2);
}

// 出力: "最初の文字列" と "2 番目の文字列バージョン 2"
myFunc("最初の文字列", "2 番目の文字列バージョン 2");

実際には、省略されたパラメータはアクセス時に常に「未定義」になります。パラメータが 1 つしかない場合、これは良い解決策ですが、複数ある場合はどうなるでしょうか?

複数のパラメータがある場合は、オブジェクトをパラメータとして使用できます。これには、各パラメータに明確な名前があるという利点があります。オブジェクトパラメータを渡す場合、同じ方法でデフォルト値を宣言できます。

コードをコピーします コードは次のとおりです:

function myFunc(paramObject) {
vardefaultParams = {
param1: "最初の文字列",
param2: "2 番目の文字列",
param3: "3 番目の文字列"
};

var FinalParams = defaultParams;

// paramObject
の各プロパティを反復処理します。 for (paramObject の var キー) {
// 現在のプロパティが継承されていない場合は、続行します
If (paramObject.hasOwnProperty(key)) {
// 現在のプロパティが定義されている場合、
// FinalParams
に追加します If (paramObject[key] !== 未定義) {
finalParams[キー] = paramObject[キー];
}
}
}

console.log(finalParams.param1,
finalParams.param2,
finalParams.param3);
}
myFunc({param1: "自分の文字列"});

これは少し扱いに​​くいですが、このメソッドを多くの場所で使用する場合は、jQuery や Underscore の extend メソッドなどの関連メソッドが多くのライブラリに用意されています。

以下では、Underscore の extend メソッドを使用して、上記と同じ結果を実現します。

コードをコピー コードは次のとおりです:

function myFunc(paramObject) {
vardefaultParams = {
param1: "最初の文字列",
param2: "2 番目の文字列",
param3: "3 番目の文字列"
};

var FinalParams = _.extend(defaultParams, paramObject);

console.log(finalParams.param1,
finalParams.param2,
finalParams.param3);
}

// 出力:
// 「自分の文字列」と「2 番目の文字列」と「3 番目の文字列」
myFunc({param1: "自分の文字列"});

これは、現在の JavaScript バージョンでデフォルトのパラメータを取得する方法です。

記事内のあらゆる不正確な点についての批判と修正を歓迎します。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。