「value is null
or undefined
」をテストする最も効率的な方法は
if ( some_variable == null ){
// some_variable is either null or undefined
}
したがって、次の 2 行は同等です。
if ( typeof(some_variable) !== "undefined" && some_variable !== null ) {}
if ( some_variable != null ) {}
注1
質問で述べたように、短いバリアントはsome_variable
宣言されている必要があります。そうでない場合、ReferenceError がスローされます。ただし、多くのユースケースでは、これが安全であると想定できます。
オプションの引数を確認します。
function(foo){
if( foo == null ) {...}
既存のオブジェクトのプロパティを確認する
if(my_obj.foo == null) {...}
一方typeof
、宣言されていないグローバル変数を処理できます (単純に を返しますundefined
)。それでも、Alsciende 氏が説明したように、正当な理由により、これらのケースは最小限に抑える必要があります。
注2
この - さらに短い - バリアントは同等ではありません:
if ( !some_variable ) {
// some_variable is either null, undefined, 0, NaN, false, or an empty string
}
それで
if ( some_variable ) {
// we don't get here if some_variable is null, undefined, 0, NaN, false, or ""
}
注3
===
一般的にはの代わりに使用することをお勧めします==
。提案されたソリューションは、この規則の例外です。JSHint構文チェッカーeqnull
は、この理由からオプションを提供しています。
jQuery スタイル ガイドから:
== を優先して、厳密な等価性チェック (===) を使用する必要があります。唯一の例外は、null を介して undefined と null をチェックする場合です。
// Check for both undefined and null values, for some important reason.
undefOrNull == null;
編集 2021-03:
現在、ほとんどのブラウザはNullish 合体演算子 ( ??
)
と論理的な nullish 割り当て(??=)
を
サポートしています。これにより、変数が null または未定義の場合に、より簡潔な方法でデフォルト値を割り当てることができます。次に例を示します。
if (a.speed == null) {
// Set default if null or undefined
a.speed = 42;
}
これらの形式のいずれかとして書くことができます
a.speed ??= 42;
a.speed ?? a.speed = 42;
a.speed = a.speed ?? 42;