どんな列挙の物件をJavaScriptオブジェクト?[重複]
-
01-07-2019 - |
質問
この質問に答えはこちら
どんな列挙の物件をJavaScriptオブジェクト?
いったいリストのすべての定義変数とその値がっていることを定義変数を作成し実際に、物件のウィンドウのオブジェクトです。
解決
もの:
for(var propertyName in myObject) {
// propertyName is what you want
// you can get the value like this: myObject[propertyName]
}
今まなプライベート変数このようになりません。
編集: @bitwiseplatypus が正しいことを使用しない限り、 hasOwnProperty()
方法、また性質を継承した-しかし、なぜだかよくわかりません誰でも馴染みのオブジェクト指向プログラミングが期待もます。一般的に、誰かがそこに施されたダグラスCrockfordのについての警告この、いまだ混乱させてくれます。再び相続は、通常のOO言語はその一部JavaScriptかかわらず、でプロトタイプ.
現在、と hasOwnProperty()
は 用フィルタリングがいらない音、警告としてのものがある場合に危険なく継承されます。
編集2: @bitwiseplatypus の状況が起きるべき人の物件の追加方法のおのオブジェクトの整列をポイントのよきものを書いた自体を通じて試作しながら、ここが予期せぬ挙動を、私は個人的な私の問題。をうかがわせるものとなっている。ものになっているのでしょうか?デザインのものように使う試作品は、工事期間中の私物となっているコードを繰り返して調べてのオブジェクトのプロパティをしたいすべてを継承。っ hasOwnProperty()
.それは、誰に追加し新しい物件です。は自分の過失の場合もうひどいですか?ないと思います。これにjQuery例として、指定の拡張動作( jQuery.extend
や jQuery.fn.extend
).
他のヒント
を使用 for..in
ループを列挙オブジェクトの特性にも注意しなくてはならない。の列挙を返し特性のなされるオブジェクトの列挙ものから試作品の親オブジェクト。
var myObject = {foo: 'bar'};
for (var name in myObject) {
alert(name);
}
// results in a single alert of 'foo'
Object.prototype.baz = 'quux';
for (var name in myObject) {
alert(name);
}
// results in two alerts, one for 'foo' and one for 'baz'
などの継承性に列挙、チェック hasOwnProperty()
:
for (var name in myObject) {
if (myObject.hasOwnProperty(name)) {
alert(name);
}
}
編集: 私は国立大学志望の浪人生でJasonBunting決しない列挙を継承します。あり は 危険の列挙を受け継性さんが期待できますので変更の挙動のコードです。
なかにこの問題が存在するその他の言語実際に存在するには、JavaScriptが特に弱い立場に置からの修正のオブジェクトの試作に影響する子オブジェの場合でも、変更後のスインスタンス
このJavaScriptを提供 hasOwnProperty()
, し、そのものを使用できるので確保のためにその第三者からのコード(またはその他のコードが変更試作品な休憩です。ほかの追加イキャストのバイトコードが下振れる使用 hasOwnProperty()
.
の標準的な方法は、既に提案されている複数回の:
for (var name in myObject) {
alert(name);
}
しかしインターネットExplorerの6、7、8、グにJavaScriptを通訳する効果がありますが一部のキーは列挙する。行った場合、このコード:
var obj = { toString: 12};
for (var name in obj) {
alert(name);
}
の場合はアラート"12"すべてのブラウザ以外が打ち出されている。-IEだけを無視するこの鍵があります。の影響のキー値は:
isPrototypeOf
hasOwnProperty
toLocaleString
toString
valueOf
する本当に安全で良いようなもの:
for (var key in myObject) {
alert(key);
}
var shadowedKeys = [
"isPrototypeOf",
"hasOwnProperty",
"toLocaleString",
"toString",
"valueOf"
];
for (var i=0, a=shadowedKeys, l=a.length; i<l; i++) {
if map.hasOwnProperty(a[i])) {
alert(a[i]);
}
}
しかし、EcmaScript5を定義する Object.keys(myObject)
機能を返しますキーオブジェクトの配列として一部のブラウザ(例:Safari4)既に実行いたします。
モダンブラウザECMAScript5)取得するenumerable性ことができるの?
オブジェクトです。キー(obj) (チェックインのリンクにスニペットとの互換性のために古いブラウザ)
をも非enumerable物件:
オブジェクトです。getOwnPropertyNames(obj)
追加情報:うenumerable属性?
んの一例にとって驚いは関連する:
var myObject = { name: "Cody", status: "Surprised" };
for (var propertyName in myObject) {
document.writeln( propertyName + " : " + myObject[propertyName] );
}
も驚きの出力
name : Cody
status : Surprised
forEach : function (obj, callback) {
for (prop in obj) {
if (obj.hasOwnProperty(prop) && typeof obj[prop] !== "function") {
callback(prop);
}
}
}
なぜですか?他のスクリプトのページのオブジェクトの試作:
Object.prototype.forEach = function (obj, callback) {
for ( prop in obj ) {
if ( obj.hasOwnProperty( prop ) && typeof obj[prop] !== "function" ) {
callback( prop );
}
}
};
for (prop in obj) {
alert(prop + ' = ' + obj[prop]);
}
簡単なJavaScriptコード:
for(var propertyName in myObject) {
// propertyName is what you want.
// You can get the value like this: myObject[propertyName]
}
jQuery:
jQuery.each(obj, function(key, value) {
// key is what you want.
// The value is in: value
});
このことは--- for (property in object) { // do stuff }
についての特性、そのすべての世界的に宣言された変数のウィンドウオブジェクトで..
こちらはどのように列挙オブジェクトの特性:
var params = { name: 'myname', age: 'myage' }
for (var key in params) {
alert(key + "=" + params[key]);
}
をご利用の場合 Underscore.js 図書館利用できる機能 キー:
_.keys({one : 1, two : 2, three : 3});
=> ["one", "two", "three"]
Pythonの辞を"キー方法は本当に便利です。と思いJavaScriptいうこと:
function keys(){
var k = [];
for(var p in this) {
if(this.hasOwnProperty(p))
k.push(p);
}
return k;
}
Object.defineProperty(Object.prototype, "keys", { value : keys, enumerable:false });
編集:その答えの@カルロス-ruana作品です。いたしました。キー(ウィンドウ)の結果が何をできたので、良かったです。
編集後5年間なに良いアイデアを延長 Object
, で紛争その他のライブラリで使用する場合があり keys
その物の生存可能な場予測不能な行動ができます。@カルロス-ruanaの答えは、正しい方向で取得の鍵オブジェクトです。
ねば似した特性を書くために新しいコードに対するオブジェクトは、使用をお勧めしデバッガのように開いているのがfirebugとして用できます。
他の手法では試作品のオブジェクトです。toJSON()をserializeのオブジェクトをJSONには、ご両方のプロパティ名と値です。
var data = {name: 'Violet', occupation: 'character', age: 25, pets: ['frog', 'rabbit']};
Object.toJSON(data);
//-> '{"name": "Violet", "occupation": "character", "age": 25, "pets": ["frog","rabbit"]}'
まだ初心者でJavaScriptで書いた小さな機能を再帰的にすべて印刷の特性をオブジェクトとその子ども
getDescription(object, tabs) {
var str = "{\n";
for (var x in object) {
str += Array(tabs + 2).join("\t") + x + ": ";
if (typeof object[x] === 'object' && object[x]) {
str += this.getDescription(object[x], tabs + 1);
} else {
str += object[x];
}
str += "\n";
}
str += Array(tabs + 1).join("\t") + "}";
return str;
}