Ответ - нет. Вы не можете перечислить свойства, которые не перечисляются. Однако есть как минимум два пути решения этой проблемы.
Первый - создать все возможные комбинации символов для использования в качестве имен тестовых свойств (например: 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 Developer Center и MSDN .