Есть массив объектов в глобальном пространстве имён. Требуется получить массив имён этих объектов, которые имеют определённое свойство. Делаю так:
var test = {
pr: true
}
alert(getObjName('pr'))
function getObjName(key) {
var arr = [];
for (var obj in window) {
if (window[obj][key]) arr.push(obj)
}
return arr
}
Пробовал вместо window[obj][key] window[obj].hasOwnProperty(key) результат тот же. Если вместо arr.push(obj) поставить alert(obj), то искомый объект отобразится. Если же убрать key из window[obj][key] , то мы получим массив свойств window.
Код рабочий, за исключением того, что нет проверки на существование самого window[obj]. Так как в window довольно много служебных свойств некоторые из них могут иметь значение null и при попытке взять у null свойство будет соответствующая ошибка.
Для решения достаточно исправить условие следующим образом:
window[obj] && window[obj][key]
Сборка персонального компьютера от Artline: умный выбор для современных пользователей