次の方法でデフォルト値を設定することと、正しい方法との間に違いはありますか?
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'
次の方法でデフォルト値を設定することと、正しい方法との間に違いはありますか?
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'
これらはすべて非常に異なることを行います:
var1 = var1 || 'default_value'
var1
がfalsey(、、、、、)の'default_value'
場合var1
は等しくなります。これは、これらの値のいずれか (おそらく最も顕著なのは 、、または) である場合、に等しいことを意味します。NaN
false
0
''
undefined
var1
false
0
''
var1
default_value
var1 = typeof(var1) !== 'undefined' ? var1 : 'default_value'
var1
の型が と厳密に等しい場合、 は等しくなり'default_value'
ます。var1
'undefined'
var1 = var1 !== 'undefined' ? var1 : 'default_value'
var1
が文字列と厳密に等しくない'default_value'
場合にのみ等しくなります。var1
'undefined'
var1 = var1 != 'undefined' ? var1 : 'default_value'
var1
が文字列と等しく'default_value'
ない場合にのみ等しくなります。var1
'undefined'
最後の 2 つはおそらく誤りです。変数の値が string かどうかを確認する必要はほとんどありません'undefined'
。undefined
あなたはおそらく直接チェックするつもりでした。
===
これらのそれぞれを完全に理解するには、厳密な等価 ( ) 演算子と等価演算子 ( )の違いについて読む必要があります==
。MDN の比較演算子の記事は、これをうまく説明しています。
2 つ目は 4 つの中で最も正しいものです。意図したとおりに機能します(変数が設定されていない場合は、デフォルト値を使用してください)。
var1
がfalseの場合、これもデフォルト値を使用します( 0
、false
、null
、''
およびundefined
)var1
が文字列と同等でない場合、これはデフォルト値を使用します'undefined'
var1
が string と等しくない場合、これはデフォルト値を使用します'undefined'
。1 番目と 2 番目は機能しますが、条件が異なります。
3 番目と 4 番目は値を文字列と比較しますが"undefined"
、未定義の値であるかどうかはまったく判別されません。
最初の方法は、現在の値が false と評価された場合にデフォルトを使用します。これはほとんどの値で機能しますが、たとえばtrue
、ブール値のデフォルトとして使用した場合、それを設定してfalse
テストに耐えさせることはできません。
var var1 = false;
var1 = var1 || true;
true
すでに値を持っていましたが、今はそうです。0
または などの他の特定の値でも同じ問題が発生します""
。
2 つ目は、さまざまなデータ型で最も一貫して機能するものです。ただし、最初のものは短いため、よく使用されます。