11

このコードは何を表しているのでしょうか? 私はそれがある種のif代替構文であることを知っています...

pattern.Gotoccurance.score != null ? pattern.Gotoccurance.score : '0'

この種のコーディングの必要性は何ですか? これはより効率的ですか、それとも同じ効率の短縮版ですか?

4

5 に答える 5

38

これは条件演算子であり、次のようなものと同等です。

if (pattern.Gotoccurance.score != null) {
  pattern.Gotoccurance.score;
} else {
  '0';
}

しかし、次のように、投稿したコードに割り当てステートメントが欠落していると思います。

var score = pattern.Gotoccurance.score !=null ? pattern.Gotoccurance.score : '0';

null でない場合、score変数が割り当てられます。pattern.Gotoccurance.score

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に代入されます(偽の値は、、、、、長ゼロの文字列またはです) 。scorefalsenullundefined0NaN

それ以外の場合、偽の場合'0'は割り当てられます。

パフォーマンスは同等であり、読みやすさに重点を置く必要があります。私は非常に単純な式で三項演算子を使用しようとしています。また、書式を改善して、読みやすくするために 2 行に分割することもできます。

var status = (age >= 18) ? "adult"
                         : "minor";

関連する質問:

于 2009-11-06T15:35:27.037 に答える
5

これは三項演算子であり、if ステートメントを簡略化した方法です。

書き直すと、次のようになります。

if (pattern.Gotoccurance.score != null) {
   return pattern.Gotoccurance.score;
} else {
   return '0';
}
于 2009-11-06T15:36:50.607 に答える
2

三項演算子といいます。

于 2009-11-06T15:35:53.763 に答える
0

三項演算子/条件演算​​子です。

数学では、3 項演算は 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 つのバリアントは switch です。

function CheckEvenOdd()
{
    var number = 2;
    switch(number % 2)
    {
        case 0:
            alert("even");
            break;
        default:
            alert("odd");
            break;
    }
}

ここで、説明したように実行する単純なif..else条件がある場合は、3 項を使用できます。

ただし、条件チェックが複雑になる場合は、if..elseまたはswitchのいずれかを使用してください。3 進数では読みやすさが失われます。

たとえば、三項演算子を使用して 2 つの数値の最小値または最大値を取得するのは簡単ですが、3 つ以上の数値から最大値と 2 番目に大きい値を見つけるのは面倒なので、お勧めしません。代わりにif..elseを使用することをお勧めします。

于 2009-11-08T06:31:50.827 に答える
0

この種のコーディングの必要性について:

三項演算子を使用して複雑さを軽減できる場合があります。

たとえば、3 つの特定のテキスト フィールドのうち少なくとも2 つに値が入力されていることを確認する必要がある Web ページがあります。if/else ロジックはかなり醜いように見えましたが、三項演算子により、入力されたフィールドの数を判断するためのワンライナーになりました。

var numberFilledInFields = ( (firstName.length > 0 ? 1 : 0) +
                     (lastName.length > 0 ? 1 : 0) +
                     (zipCode.length > 0 ? 1 : 0) );

if (numberFilledInFields < 2)
{
    validation = false;
    return;
}

このソリューションは、いくつかの代替案よりも非常にエレガントで読みやすいように見えます。

于 2009-11-06T17:48:52.170 に答える