[解決済み] JavaScript でオブジェクトが特定のプロパティを持つかどうかを確認するにはどうすればよいですか?
質問
JavaScript でオブジェクトが特定のプロパティを持っているかどうかを確認するにはどうすればよいですか?
を考えてみましょう。
x = {'key': 1};
if ( x.hasOwnProperty('key') ) {
//Do this
}
それがベストな方法なのでしょうか?
どのように解決するのですか?
回答が多く、そのほとんどが不正解で困っています。もちろん、未定義、NULL、またはFALSEの値を持つオブジェクト・プロパティは存在し得ます。ですから、単純にプロパティチェックを
typeof this[property]
または、さらに悪いことに
x.key
は、完全に誤解を招く結果を与えてしまいます。
何を求めているかによりますね。もし、オブジェクトが物理的にプロパティを含んでいるかどうかを知りたいのであれば(そして、それがプロトタイプチェーンの上のどこかから来たものでないのであれば)、次のようになります。
object.hasOwnProperty
がおすすめです。最近のブラウザはすべてこれをサポートしている。(古いバージョンのSafari (2.0.1以前) では欠落していましたが、そのようなバージョンのブラウザはもうほとんど使われていません)。
もしあなたが探しているものが、オブジェクトに反復可能なプロパティがあるかどうか(オブジェクトのプロパティを反復すると、それが表示される)であれば、次のようにします。
prop in object
を使えば、希望通りの効果が得られます。
を使用するため
hasOwnProperty
は、おそらくあなたが望むものであり、あなたがフォールバックの方法を必要とするかもしれないことを考慮し、私はあなたに次の解決策を提示します。
var obj = {
a: undefined,
b: null,
c: false
};
// a, b, c all found
for ( var prop in obj ) {
document.writeln( "Object1: " + prop );
}
function Class(){
this.a = undefined;
this.b = null;
this.c = false;
}
Class.prototype = {
a: undefined,
b: true,
c: true,
d: true,
e: true
};
var obj2 = new Class();
// a, b, c, d, e found
for ( var prop in obj2 ) {
document.writeln( "Object2: " + prop );
}
function hasOwnProperty(obj, prop) {
var proto = obj.__proto__ || obj.constructor.prototype;
return (prop in obj) &&
(!(prop in proto) || proto[prop] !== obj[prop]);
}
if ( Object.prototype.hasOwnProperty ) {
var hasOwnProperty = function(obj, prop) {
return obj.hasOwnProperty(prop);
}
}
// a, b, c found in modern browsers
// b, c found in Safari 2.0.1 and older
for ( var prop in obj2 ) {
if ( hasOwnProperty(obj2, prop) ) {
document.writeln( "Object2 w/ hasOwn: " + prop );
}
}
上記は、クロスブラウザーで動作し、かつ
hasOwnProperty
同じプロパティがプロトタイプにある場合とインスタンスにある場合を区別することができず、単にプロトタイプにあるものとみなしてしまうのです。あなたの状況に応じて、より甘くしたり厳しくしたりすることができますが、少なくともこれはより有用なはずです。
関連
-
vue for 登録ページ効果 vue for sms 認証コードログイン
-
[解決済み] 配列から特定の項目を削除するにはどうすればよいですか?
-
[解決済み] JavaScriptでオブジェクトをディープクローンする最も効率的な方法は何ですか?
-
[解決済み] JavaScript で配列に値が含まれているかどうかを確認するにはどうすればよいですか?
-
[解決済み] JavaScriptのオブジェクトが空であることをテストするにはどうすればよいですか?
-
[解決済み] JavaScriptのオブジェクトにキーが存在するかどうかをチェックする?
-
[解決済み] JavaScriptのオブジェクトをループスルーまたは列挙するにはどうすればよいですか?
-
[解決済み】jQueryでチェックボックスがチェックされているかどうかを確認するにはどうすればよいですか?
-
[解決済み】未定義のオブジェクトプロパティを検出する
-
[解決済み】オブジェクトからプロパティを削除する(JavaScript)
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
fetch ネットワークリクエストラッパーの説明例
-
Vue Element-uiは、アイコンを追加するためのツリーコントロールノードを詳細に実装しています。
-
Vue+ElementUIによる大規模なフォームの処理例
-
vue+webrtc(Tencent cloud)ライブ機能の実践を実現するために
-
vueが定義するプライベートフィルタと基本的な使い方
-
Vueのフォームイベントのデータバインディングの説明
-
[解決済み】JavaScriptの配列でforEachが関数でない不具合
-
[解決済み】"フォームが接続されていないため、フォームの送信がキャンセルされました "というエラーの取得について
-
[解決済み】エラー。Ionic使用中にモジュール '../lib/utils/unsupported.js' が見つかりませんでした。
-
[解決済み] JavaScriptでオブジェクトがキーを持っているかどうかを確認するにはどうすればよいですか?[重複しています]