Список встроенных свойств объекта

Есть ли способ перебрать встроенные свойства объекта Javascript?

for ... in приближает меня к тому месту, куда я хочу пойти, но «цикл for ... in не выполняет итерацию по встроенным свойствам».

Не могли бы вы преобразовать свой объект в JSON и проанализировать результат?

starbeamrainbowlabs 28.08.2012 17:10
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
6
1
3 854
5

Ответы 5

Это будет работать с JSON. Не много тестировалось:

<style>
.tree {
    margin-left:5px;
}
</style>
<div id='out'></div>
<script type = "text/javascript">
data = {"feep":{"bar":{"baz":"37628","quux":{"a":"179","b":"7"}},"foo":"1025"},"Bleh":"1234"}
$('out').innerHTML = renderJSON(data)

function renderJSON(obj) {
    var keys = []
    var retValue = ""
    for (var key in obj) {
       //$('out').innerHTML = $('out').innerHTML +"<br />" + key + ", " + obj[key]      
        if (typeof obj[key] == 'object') {
            retValue += "<div class='tree'>" + key                      
            retValue += renderJSON(obj[key])
            retValue += "</div>"
        }
        else {
            retValue += "<div class='tree'>" + key + " = " + obj[key] + "</div>"
        }

       keys.push(key)
    }
    return retValue

}
</script>

Когда вы говорите «встроенные свойства», о каком именно наборе свойств вы имеете в виду?

Из "JavaScript - хорошие стороны" Дугласа Крокфорда:

The for in statement can loop over all of the property names in an object. The enumeration will include all of the properties—including functions and prototype properties that you might not be interested in—so it is necessary to filter out the values you don't want. The most common filters are the hasOwnProperty method and using typeof to exclude functions:

var name; 
for (name in another_stooge) 
{
    if (typeof another_stooge[name] !== 'function') {
        document.writeln(name + ': ' + another_stooge[name]);
    } 
}

Мой конкретный вариант использования - это перечисление встроенных методов для Array.prototype. Из справки по javascript ядра MDC: «Цикл for ... in не выполняет итерацию по встроенным свойствам». Что подтверждает простой цикл над Array.prototype.

andyuk 04.11.2008 22:08

Ответ - нет. Невозможно перечислить свойства, которые нельзя перечислить. Однако есть как минимум два способа обойти это.

Первый - создать все возможные комбинации символов для использования в качестве имен тестовых свойств (подумайте: a, b, c, ... aa, ab, ac, ad, ...). Учитывая, что сообщество стандартов известно тем, что придумывает действительно длинные имена методов (getElementsByTagNames, propertyIsEnumerable), этот метод потребует некоторого терпения. :-)

Другой подход - проверить известные собственные свойства из некоторого предопределенного списка.

Например: для array вы должны проверить все известные собственные свойства Function.prototype:

prototype caller constructor length name apply call toSource toString valueOf toLocaleString

... и вещи, унаследованные от Object.prototype:

__defineGetter__ __defineSetter__ hasOwnProperty isPrototypeOf __lookupGetter__
__lookupSetter__ __noSuchMethod__ propertyIsEnumerable unwatch watch

... и вещи, унаследованные от Array:

index input pop push reverse shift sort splice unshift concat join slice indexOf lastIndexOf 
filter forEach every map some reduce reduceRight

..и, наконец, при желании, каждое перечислимое свойство объекта, который вы тестируете:

for (var property in myArrayObject) myPossibleProperties.push( property );

Затем вы сможете протестировать каждый из них, чтобы увидеть, присутствуют ли они в экземпляре объекта.

Это не покажет неизвестных неперечислимых членов (недокументированных или установленных другими скриптами), но позволит вам перечислить, какие собственные свойства доступны.

Я нашел информацию о собственных свойствах Array на Центр разработчиков Mozilla и MSDN.

Нет, вы не можете перечислить встроенные свойства объекта. Но вы можете обратиться к справочнику разработчика. Например, чтобы узнать все методы и свойства объекта Math, реализованного в firefox, вы воспользуетесь справочником Firefox по Javascript Math: https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Math.

Я понимаю, что этому вопросу три года, но теперь, с ES5, это возможно:

>>> Object.getOwnPropertyNames(Object)

["prototype", "getPrototypeOf", "getOwnPropertyDescriptor", "keys", "defineProperty", "defineProperties", "create", "getOwnPropertyNames", "isExtensible", "preventExtensions", "freeze", "isFrozen", "seal", "isSealed", "length", "arity", "name", "arguments", "caller"]

Чтобы немного уточнить, Object.getOwnPropertyNames (Array) предоставляет встроенные свойства для Array.

forforf 26.05.2012 02:35

Другие вопросы по теме