代替の場合はJavaScript [重複]
-
18-09-2019 - |
質問
この質問にはすでに答えがあります:
- JavaScript の疑問符とコロン 7 件の回答
このコードは何を表しているのでしょうか?それはある種のことだとわかっています if
代替構文...
pattern.Gotoccurance.score != null ? pattern.Gotoccurance.score : '0'
アップデート:
この種のコーディングの必要性は何でしょうか?これはより効率的ですか、それとも同じ効率の単なる短縮版ですか?
解決
それは 条件付き 演算子は、次のようなものと同等です。
if (pattern.Gotoccurance.score != null) {
pattern.Gotoccurance.score;
} else {
'0';
}
しかし、投稿したコードには次のように代入ステートメントが欠落していると思います。
var score = pattern.Gotoccurance.score !=null ? pattern.Gotoccurance.score : '0';
の score
変数は次の場合に割り当てられます pattern.Gotoccurance.score
は null ではありません:
var score;
if (pattern.Gotoccurance.score != null) {
score = pattern.Gotoccurance.score;
} else {
score = '0';
}
JavaScript でこの種の「デフォルト値」の割り当てを行う一般的なパターンは、論理 OR 演算子 (||
) :
var score = pattern.Gotoccurance.score || '0';
の値 pattern.Gotoccurance.score
に割り当てられます score
その値がそうでない場合にのみ変数 偽りの (偽の値は false
, null
, undefined
, 0
, 、長さゼロの文字列、または NaN
).
そうでなければ、それが虚偽であれば '0'
割り当てられます。
アップデート: パフォーマンスは同等です。読みやすさに重点を置く必要があります。私は非常に単純な式に三項演算子を使用するようにしています。また、読みやすくするために書式を 2 行に分割して改善することもできます。
var status = (age >= 18) ? "adult"
: "minor";
関連する質問:
他のヒント
これは三項演算子には、if文を行うための人手不足の方法です。
再書かれている場合、それは次のようになります:
if (pattern.Gotoccurance.score != null) {
return pattern.Gotoccurance.score;
} else {
return '0';
}
これは、三項演算子と呼ばれています。
質問のアップデートへの対応「コードのこの種のために必要なのはなぜ?」
あなたは時々複雑さを軽減するために三項演算子を使用することができます:
たとえば、私はその3つの特定のテキストフィールドのうち、の少なくともの二つは値が入っていた検証するために必要なWebページを持っています。もし/ elseロジックはかなり醜い見えたが、三項演算子は、中に充填したどのように多くの分野を決定するためにそれワンライナー作っます:
var numberFilledInFields = ( (firstName.length > 0 ? 1 : 0) +
(lastName.length > 0 ? 1 : 0) +
(zipCode.length > 0 ? 1 : 0) );
if (numberFilledInFields < 2)
{
validation = false;
return;
}
このソリューションは非常にエレガントで、いくつかの選択肢よりも読みやすい表示されます。
三項演算子・条件演算子です。
数学では、 三項演算 は、n = 3 の n 項演算です。セット A に対する 3 項演算では、A の任意の 3 つの要素を取得し、それらを組み合わせて A の 1 つの要素を形成します。
これは if..else の短縮形です
例えば数値が偶数かどうかを知りたい
// if..else アプローチを使用する
function CheckEvenOdd()
{
var number = 2;
if(number %2 == 0) alert("even");else alert("odd");
}
//三項を使用する
function CheckEvenOdd()
{
var number = 2;
alert((number %2 == 0)?"even":"odd");
}
もう 1 つのバリエーションはスイッチです
//スイッチを使用する
function CheckEvenOdd()
{
var number = 2;
switch(number %2)
{
case 0:alert("even");break;
default:alert("odd");break;
}
}
ここで、説明したように実行する単純な if..else 条件がある場合は、3 項を続行できます。
ただし、条件チェックが複雑になる場合は、三項形式では可読性が失われるため、if..else を使用するか、スイッチを使用してください。
例えば三項演算子を使用して 2 つの数値の最小値または最大値を計算するのは簡単ですが、3 つ以上の数値の中から最大値と 2 番目に大きい値を見つけるのは不器用になるため、推奨されません。代わりに if..else を使用することをお勧めします。