#javascript
#javascript
Вопрос:
Попробуйте выполнить следующее:
for (var key in String.prototype)
console.log(key);
Это не дает вам … ничего (ну, если вы сами не определили какой-нибудь посторонний материал). Тем не менее, у вас все еще есть String.prototype.split
например. Я пробовал это на любом другом собственном объекте ( Number
, Array
Object
) для получения того же результата.
Следующее также «не работает»:
for (var key in Array)
console.log(key);
Пока есть Array.isArray
например.
Object.keys(Array.prototype)
выдает пустой массив, и так делает Object.keys(Array)
. Однако, Object.keys(jQuery)
например, предоставляет гигантский массив, как и ожидалось.
Итак, почему мы не можем перебирать исходные файлы, предоставляемые браузером, но при этом получать к ним доступ?
Ответ №1:
for...in
Цикл не выполняет итерацию по встроенным свойствам
Причина в том, что свойства в Javascript либо перечислимы, либо неисчислимы; «перечислимый» означает, что вы можете получить доступ к свойству в for..in
цикле. Все встроенные свойства не поддаются перечислению.
Современные браузеры поддерживают Object.getOwnPropertyNames
метод:
console.log(Object.getOwnPropertyNames(Array.prototype));
// ["length", "constructor", "concat", "map", "sort", "join", "indexOf", "filter", "some", "toString", "reduceRight", "splice", "forEach", "shift", "unshift", "toLocaleString", "lastIndexOf", "reverse", "reduce", "pop", "push", "every", "slice"]