JavaScript でオブジェクトにキーが存在するかどうかをチェックする
- JavaScript で要素ダイレクトアクセスメソッドを使用してオブジェクトキーが存在するかどうかを確認する
-
in演算子を使用して、JavaScript にオブジェクトキーが存在するかどうかを確認する -
JavaScript で
hasOwnPropertyメソッドを使用してオブジェクトキーが存在するかどうかを確認する -
ライブラリ
underscoreを使って 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
ライブラリはここからインポートできます。