2013-08-31 7 views
3

Я хочу Итерацию через все свойства объекта. Я пытался это сделать, используяИтерация через все свойства объекта

for(var key in obj) 

Но это не дало мне всех свойств. Например, ключевой «клик» отсутствует. Но когда я пытаюсь сделать

obj['click'] 

У меня что-то есть.

Я пытаюсь сделать это на IE7

+0

Что это __something__ вы получаете? –

+0

Если вы правильно итерации, возможно, используете 'hasOwnProperty', например http://stackoverflow.com/a/921808/613130, поэтому вы пропускаете свойства, определенные в« родительских »объектах. – xanatos

ответ

3

В for .. in итерации цикла по всем enumerable свойств, а не по всем свойствам.

Так что я подозреваю, что click не перечислил или вы что-то пропустили.

Пример о том, как установить свойство, которое не будет доступно через for .. in цикла:

var obj = {}; 

Object.defineProperty(obj, "stealth", { 
    enumerable: false, 
    value: "you don't iterate over me" 
}); 

// obj.stealth === "you don't iterate over me" 

for (var i in obj) { 
    // Loop will not enter here 
} 

Вы можете проверить, является ли перечислимы свойство (т.е. будет доступен в for .. in цикле), используя Object.propertyIsEnumerable() метод:

obj.propertyIsEnumerable('stealth') === false 
+0

есть ли возможность получить все свойства? –

+1

@JohnSmith - да, это 'Object.getOwnPropertyNames (obj);' но он не поддерживается IE до версии 9. – kamituel

1

For/in запускает все перечислимые свойства, в том числе унаследованные от прототипов предков. Если вы хотите просто те, для «вашего объекта», используйте Object.keys():

Object.keys(yourobject).forEach(function(propertyName) { 
    var value = yourobject[propertyName]; 
    console.log(propertyName + ":", value); 
}); 
+0

Это чрезвычайно полезная концепция. Спасибо. – Jazzy

Смежные вопросы