オブジェクトの存在チェックはバグの原因となることが多いので、しっかりと理解しておきたいテーマの一つですね。
この記事ではTypeScriptでのオブジェクトとプロパティの存在チェックの方法を具体的に紹介します。
まずは、オブジェクトそのものが存在しているか、未定義なのかを判定する方法をいくつか紹介します。
以下の順で詳しく説明していきます。
undefinedと比較する方法typeof 演算子を使う方法void 演算子を使う方法==null を使う方法undefinedと比較する方法最も基本的な方法ですね。
以下のように、オブジェクトが undefined かどうか直接比較します。
const obj: any = getSomeObject()
if (obj === undefined) {
console.log('obj は undefined です!')
}
このコードでは getSomeObject() で取得した obj が undefined かどうかを直接比較しています。
シンプルですが 変数が宣言されていない場合エラーが出る点に注意 が必要です。
typeof 演算子を使う方法typeof は変数の型を文字列として取得することができる演算子ですね。
以下のように使用可能です。
const obj: any = getSomeObject()
if (typeof obj === "undefined") {
console.log('obj は undefined です!')
}
この方法の良い点は、変数がまだ宣言されていない場合でもエラーにならない ことです。
安全に存在チェックが行えるので、オススメの方法の一つです。
void 演算子を使う方法少し変わった方法ですが void 演算子を使うことで undefined を明示的に生成できます。
以下のように記述します。
const obj: any = getSomeObject()
if (obj === void 0) {
console.log('obj は undefined です!')
}
この方法はあまりポピュラーではないですが、知っておくと時々役立ちます。
==null を使う方法==null を使うと null か undefined のどちらかを以下のようにチェックできますね。
const obj: any = getSomeObject()
if (obj == null) {
console.log('obj は null か undefined です!')
}
この方法は手軽ですが null と undefined の両方をチェックしてしまうので、状況に応じて適切に選択する必要があります。
ここまで、オブジェクトが未定義かどうかを判定する方法をいくつ紹介しました。
個人的には、変数の存在チェックには typeof が安全でオススメです。
ここまでオブジェクトが未定義かどうかを確認する方法を紹介しました!
そのオブジェクトに特定のプロパティが存在しているかどうかも重要ですよね。
次はその方法を紹介していきます!
typeof 演算子を使う方法in 演算子を使う方法hasOwnProperty メソッドを使う方法typeof 演算子を使う方法typeof を使ってプロパティが undefined でないことを確認することもできます。
const obj: { prop?: string } = getSomeObject()
if (typeof obj.prop !== "undefined") {
console.log('prop は存在しています!')
}
ここでは obj に prop というプロパティが存在しているかをチェックしています。
存在していれば「prop は存在しています!」というメッセージを表示しています。
in 演算子を使う方法in 演算子を使うオブジェクトが指定したプロパティを持っているかどうかを確認することができます。
この方法はプロパティの存在を手軽に調べたい場合に大変役立ちますね!
const obj: { prop?: string } = getSomeObject()
if ("prop" in obj) {
console.log('prop は存在しています!')
}
このコードの if ("prop" in obj) は obj が prop という名前のプロパティを持っているかどうかを確認します。
この場合 prop が存在すればコンソールにメッセージが表示されます。
ただし、使用する際の注意点があります。in 演算子は オブジェクトのプロトタイプチェーン上のプロパティもチェック してしまいます。
これは何を意味するのかと言うと、オブジェクトが直接持っていないプロパティでも、それがオブジェクトのプロトタイプに存在する場合 in 演算子は true を返します。
例えば、Arrayのインスタンスが length プロパティを持っているかどうかを確認する場合、それはArrayのプロトタイプに存在するので true が返ります。
hasOwnProperty メソッドを使う方法オブジェクト自体がそのプロパティを持っているかだけを確認するには hasOwnProperty を使用します。
const obj: { prop?: string } = getSomeObject()
if (obj.hasOwnProperty("prop")) {
console.log('prop は存在しています!')
}
この方法は 継承したプロパティはチェックされない ので、直接そのオブジェクトにプロパティが存在するかを確認したい場合に便利です。
in 演算子はオブジェクトが継承したプロパティもチェックしますが、hasOwnProperty ではチェックされません。
この違いを理解して適切に方法を選ぶことが大切ですね!
締めくくりに、TypeScriptでの存在チェックは多くの方法がありますが、それぞれの方法には特性と用途があります。
コードの堅牢性を高めるためにも適切な方法を選んで利用することを心がけましょう!
TypeScriptの短絡評価の使い方「&&」「||」「??」の解説
TypeScriptのタイマー関数setTimeoutとsetIntervalの使い方
TypeScriptの多次元配列の使い方についてわかりやすく解説
TypeScriptでのタプルの使い方と実践テクニックを解説
TypeScriptのimport typeをわかりやすく解説
TypeScriptの配列やオブジェクトのソート完全ガイド
TypeScriptコメントアウトの使い方 完全ガイド
TypeScriptで即時関数を使う方法を解説!基本から実践的な使い方まで
TypeScriptで知っておきたい整数・安全整数判定の正しい使い方