-2

次の方法でデフォルト値を設定することと、正しい方法との間に違いはありますか?

1) var1 = var1 || 'default_value'
2) var1 = typeof(var1) !== 'undefined' ? var1 : 'default_value'
3) var1 = var1 !== 'undefined' ? var1 : 'default_value'
4) var1 = var1 != 'undefined' ? var1 : 'default_value'
4

3 に答える 3

1

これらはすべて非常に異なることを行います:

  1. var1 = var1 || 'default_value'

    var1falsey(、、、、、)の'default_value'場合var1は等しくなります。これは、これらの値のいずれか (おそらく最も顕著なのは 、、または) である場合、に等しいことを意味します。NaNfalse0''undefinedvar1false0''var1default_value

  2. var1 = typeof(var1) !== 'undefined' ? var1 : 'default_value'

    var1の型が と厳密に等しい場合、 は等しくなり'default_value'ます。var1'undefined'

  3. var1 = var1 !== 'undefined' ? var1 : 'default_value'

    var1が文字列と厳密に等しくない'default_value'場合にのみ等しくなります。var1'undefined'

  4. var1 = var1 != 'undefined' ? var1 : 'default_value'

    var1が文字列と等しく'default_value'ない場合にのみ等しくなります。var1'undefined'

最後の 2 つはおそらく誤りです。変数の値が string かどうかを確認する必要はほとんどありません'undefined'undefinedあなたはおそらく直接チェックするつもりでした。

===これらのそれぞれを完全に理解するには、厳密な等価 ( ) 演算子と等価演算子 ( )の違いについて読む必要があります==MDN の比較演算子の記事は、これをうまく説明しています。

于 2013-02-21T16:43:11.747 に答える
1

2 つ目は 4 つの中で最も正しいものです。意図したとおりに機能します(変数が設定されていない場合は、デフォルト値を使用してください)。

  1. var1がfalseの場合、これもデフォルト値を使用します( 0falsenull''およびundefined
  2. var1が文字列と同等でない場合、これはデフォルト値を使用します'undefined'
  3. var1が string と等しくない場合、これはデフォルト値を使用します'undefined'
于 2013-02-21T16:37:34.813 に答える
1

1 番目と 2 番目は機能しますが、条件が異なります。

3 番目と 4 番目は値を文字列と比較しますが"undefined"、未定義の値であるかどうかはまったく判別されません。

最初の方法は、現在の値が false と評価された場合にデフォルトを使用します。これはほとんどの値で機能しますが、たとえばtrue、ブール値のデフォルトとして使用した場合、それを設定してfalseテストに耐えさせることはできません。

var var1 = false;

var1 = var1 || true;

trueすでに値を持っていましたが、今はそうです。0または などの他の特定の値でも同じ問題が発生します""

2 つ目は、さまざまなデータ型で最も一貫して機能するものです。ただし、最初のものは短いため、よく使用されます。

于 2013-02-21T16:39:49.120 に答える