JavaScript コードでは、次の if ステートメントの double-equals 構造を置き換えたいと考えています。
if( name == null ) {
//do stuff
}
double equals は、jshint ルール "eqeqeq" では失敗します。この場合、double equals を triple equals に置き換えることが推奨されます。== null
少しの間、上記のコードが次のように変更されたと想像してみましょう=== null
。
if( name === null ) {
//do stuff
}
これは、値を持つ明示的に定義された変数に対しては機能しますnull
が、残念ながら、このような未設定の変数に対しては失敗します。
var a = null; // works correctly
var b; // will fail in comparison
以前は、3 等号のルールが重要だったときに、次のようにしていました。
if( name === null ||| typeof(name) === 'undefined' )
しかし、これは非常に肥大化しています。
私が今思いつくことができる最善の代替手段は、if ステートメントの性質を使用し、式を否定して単純にその== null
部分を削除する次のような false っぽい式に評価させることです。
if( !name ) {
//do stuff
}
私にとって、これははるかに単純で読みやすく、明示的な等号比較を完全に回避します。ただし、ここで見逃しているエッジの原因があるかどうかはわかりません。
問題は、一般的に== null
if 文の否定式に置き換えることができるかということです。もしそうなら、それがうまくいかない落とし穴と例外は何ですか? 一般的な配列項目、文字列、オブジェクト プロパティで機能しますか?
ソリューションを選択するための私の基準は
- きれいなコード
- 読みやすく、すぐに理解できる
- jshint ルールを検証します
- 最新のブラウザーで動作します (2015 年 1 月現在)
等値演算子==
vs===
の違いを議論するための他のわずかに関連する質問を認識していますが、これは単に if ステートメント内の null っぽいものと比較した評価の議論のためのものです。