私たちはJavaScriptコードで次のコードパターンを頻繁に使用しています
if (typeof(some_variable) != 'undefined' && some_variable != null)
{
// Do something with some_variable
}
同じ効果があり、より簡潔な確認方法はありますか?
いくつかのフォーラムや文献によると、単に次のように言うだけで同じ効果が得られるはずです。
if (some_variable)
{
// Do something with some_variable
}
残念ながら、ファイアバグは、が未定義の場合、実行時にこのようなステートメントをエラーとして評価しますsome_variable
が、最初のステートメントは問題ありません。これは Firebug の (望ましくない) 動作だけでしょうか、それともこれら 2 つの方法の間に実際に何らかの違いがあるのでしょうか。
ベストアンサー1
null
「値が」をテストする最も効率的な方法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
この理由からオプションも提供されています。
厳密な等価性チェック (===) は == の代わりに使用する必要があります。唯一の例外は、null を使用して undefined および null をチェックする場合です。
// Check for both undefined and null values, for some important reason.
undefOrNull == null;
編集 2021-03:
最近ではほとんどのブラウザをサポートするヌル合体演算子 ( ??
)そしてその論理ヌル代入(??=)
これにより、変数が 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;