[解決済み] JavaScriptオブジェクトのプロパティを列挙するにはどうすればよいですか?[重複しています]。
質問
JavaScriptオブジェクトのプロパティを列挙するにはどうしたらよいですか?
本当は、定義されたすべての変数とその値をリストアップしたいのですが、変数を定義すると、実際にはウィンドウ・オブジェクトのプロパティが作成されることを知りました。
どのように解決するのですか?
簡単なことです。
for(var propertyName in myObject) {
// propertyName is what you want
// you can get the value like this: myObject[propertyName]
}
さて、この方法ではプライベート変数を取得することはできません。
EDIT
ビットワイズプラティパス
を使用しない限りは、その通りです。
hasOwnProperty()
しかし、オブジェクト指向プログラミングに慣れた人が、なぜそうでないことを期待するのか、私にはわかりません。通常、この問題を持ち出す人は、Douglas Crockfordの警告を受けたことがあるのですが、それでも少し混乱します。繰り返しになりますが、継承はオブジェクト指向言語では当たり前のことで、プロトタイプであるにもかかわらず、JavaScriptの一部でもあります。
さて、そうは言っても
hasOwnProperty()
は
はフィルタリングに便利ですが、継承されたプロパティを取得することに何か危険性があるかのような警告を鳴らす必要はありません。
EDIT 2:
ビットワイズプラティパス
には、オブジェクトを最初に書いた時点(プロトタイプ経由)よりも後の時点で、誰かがオブジェクトにプロパティやメソッドを追加した場合に発生する状況が示されていますが、これは確かに予期せぬ動作を引き起こすかもしれませんが、私個人はそれを完全に私の問題だとは思っていません。あくまで意見の相違です。それに、もし私がオブジェクトの構築時にプロトタイプを使いながら、オブジェクトのプロパティを反復するようなコードを設計していて、すべての継承されたプロパティが欲しいとしたらどうでしょう?その場合、私は
hasOwnProperty()
. そして、後から誰かが新しいプロパティを追加したとする。その時点で挙動がおかしくなるのは、私のせいでしょうか?私はそうは思わない。そのため、jQueryの例では、動作方法を拡張する方法を指定しているのだと思う(たとえば
jQuery.extend
と
jQuery.fn.extend
).
関連
-
[解決済み】JavaScriptの配列でforEachが関数でない不具合
-
[解決済み】リソースの読み込みに失敗した:Bind関数でサーバーが500(Internal Server Error)のステータスで応答した【非公開
-
[解決済み】Node.jsで "Cannot find module "エラーを解決するには?
-
[解決済み] JavaScriptで "use strict "は何をするのか、その根拠は?
-
[解決済み] JavaScriptで文字列が部分文字列を含むかどうかを確認する方法は?
-
[解決済み] JavaScriptでオブジェクトをディープクローンする最も効率的な方法は何ですか?
-
[解決済み] JavaScriptのオブジェクトをループスルーまたは列挙するにはどうすればよいですか?
-
[解決済み] JavaScriptでNULL、未定義、空白の変数をチェックする標準的な関数はありますか?
-
[解決済み] オブジェクトをメンバーとして、プレーンなJavaScriptオブジェクトをループさせる方法
-
[解決済み】オブジェクトからプロパティを削除する(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 実装 サイバーパンク風ボタン
おすすめ
-
Vueの要素ツリーコントロールに破線を追加する説明
-
[解決済み】Node Version Manager のインストール - nvm コマンドが見つかりません。
-
[解決済み] 配列の結合時に未定義のプロパティ 'push' を読み込むことができない
-
[解決済み】React Nativeアプリをターミナルから実行するとエラーが発生する(iOS)
-
[解決済み] Web API エラー - このリクエストはブロックされました; コンテンツは HTTPS で提供されなければなりません
-
[解決済み】ERROR エラーです。スイッチのname属性が指定されていないフォームコントロールの値アクセッサがない
-
[解決済み】(Google Map API) Geocodeは以下の理由で成功しませんでした。REQUEST_DENIED
-
[解決済み】リクエストに失敗していないのに、「TypeError: failed to fetch」が表示される。
-
[解決済み】「.addEventListener is not a function」なぜこのエラーが発生するのか?
-
[解決済み] JavaScriptのオブジェクトをループスルーまたは列挙するにはどうすればよいですか?