JavaScript でオブジェクトにキーが存在するかどうかをチェックする

Moataz Farid 2023年10月12日
  1. JavaScript で要素ダイレクトアクセスメソッドを使用してオブジェクトキーが存在するかどうかを確認する
  2. in 演算子を使用して、JavaScript にオブジェクトキーが存在するかどうかを確認する
  3. JavaScript で hasOwnProperty メソッドを使用してオブジェクトキーが存在するかどうかを確認する
  4. ライブラリ underscore を使って JavaScript でオブジェクトキーの有無を調べる
JavaScript でオブジェクトにキーが存在するかどうかをチェックする

このチュートリアルでは、複数の方法を使って JavaScript にキーが存在するかどうかを確認する方法を学習します。

JavaScript で要素ダイレクトアクセスメソッドを使用してオブジェクトキーが存在するかどうかを確認する

キーが存在する場合、そのキーは undefined を返してはならません。キーが undefined を返すかどうかを調べるには、キーに直接アクセスする必要があるが、それには object スタイルと括弧アクセススタイルの 2つの方法があります。

以下の例では、括弧スタイルを用いてキーに直接アクセスしてキーが存在するかどうかを調べる方法を示します。

let myObject = {'mykey1': 'My Value 1', 'mykey2': 'My Value 2'};

function isKeyExists(obj, key) {
  if (obj[key] == undefined) {
    return false;
  } else {
    return true;
  }
}
let result0 = isKeyExists(myObject, 'mykey0')
console.log('Check for the non-existing key, is key exists > ' + result0)

let result1 = isKeyExists(myObject, 'mykey1')
console.log('Check for the existing key, is key exists > ' + result1)

出力:

Check for the non-existing key, is key exists > false
Check for the existing key, is key exists > true

ダイレクトアクセスでキーの有無を確認するその他のスタイルは、オブジェクトスタイルを使用しています。次の例では、JavaScript でそのキーが存在するかどうかをチェックする方法を紹介します。

let myObject = {mykey1: 'My Value 1', mykey2: 'My Value 2'};

let result = myObject.mykey0 != undefined
console.log('Is myKey0 exists ? ' + result)

let result1 = myObject.mykey1 != undefined
console.log('Is myKey1 exists ? ' + result1)

出力:

Is myKey0 exists ? false
Is myKey1 exists ? true

直接キーアクセスを使って undefined をチェックする欠点の一つは、キーの値が undefined と等しくなる可能性があることです。この方法の問題点を示すために、次の例を見てみましょう。

let myObject = {mykey0: undefined, mykey1: 'My Value 1'};

let result = myObject.mykey0 != undefined
console.log('Is myKey0 exists? ' + result)

let result1 = myObject.mykey1 != undefined
console.log('Is myKey1 exists? ' + result1)

出力:

Is myKey0 exists? false
Is myKey1 exists? true

上記の場合の解決策は、プロパティを未定義の値で初期化したいときに undefined を代入することはせず、代わりに null で初期化することです。

もしどうしても undefined の値を使ってキーを初期化したい場合は、in 演算子、hasOwnProperty メソッド、または underscore ライブラリの _.has メソッドを使用するべきです。

in 演算子を使用して、JavaScript にオブジェクトキーが存在するかどうかを確認する

in 演算子は、ターゲットオブジェクトにキーが見つからなかった場合に false を返し、見つかった場合には true を返すために単純に使われます。

let myObject =
    {favoriteDish: 'Spaghetti', language: 'English'}

    function isKeyExists(obj, key) {
      return key in obj;
    }

    console.log(
        'Does language key exists? ' + isKeyExists(myObject, 'language'))
console.log(
    'Does nationality key exists? ' + isKeyExists(myObject, 'nationality'))

出力:

Does language key exists? true
Does nationality key exists? false

JavaScript で hasOwnProperty メソッドを使用してオブジェクトキーが存在するかどうかを確認する

オブジェクトに特定のプロパティキーが含まれているかどうかを調べるもう一つの方法は hasOwnProperty メソッドを使用することです。次の例では、hasOwnProperty メソッドを使用する方法を示します。

let myObject =
    {favoriteDish: 'Spaghetti', language: 'English'}

    function isKeyExists(obj, key) {
      return obj.hasOwnProperty(key);
    }

    console.log(
        'Does the object have language key? ' +
        isKeyExists(myObject, 'language'))
console.log(
    'Does the object have nationality key? ' +
    isKeyExists(myObject, 'nationality'))

出力:

Does the object have language key? true
Does the object have nationality key? false

ライブラリ underscore を使って JavaScript でオブジェクトキーの有無を調べる

既に underscore ライブラリのメソッドを利用している場合は _.has() メソッドを利用することができます。

let myObject =
    {favoriteDish: 'Spaghetti', language: 'English'}

    console.log(
        'Check using underscore library if the object has language key? ' +
        _.has(myObject, 'language'))

console.log(
    'Check using underscore library if the object has nationality key? ' +
    _.has(myObject, 'nationality'))

出力:

Check using underscore library if the object has language key? true
Check using underscore library if the object has nationality key? false

ライブラリはここからインポートできます。

関連記事 - JavaScript Object