wqertAnna
@wqertAnna

Почему свойство length массива неперечисляемое, но метод .propertyIsEnumerable(length) возвращает true?

let arr = ['a', 'b', 'c'];
for (let key in arr) {
console.log(key);
}
// => 0
// => 1
// => 2

Т.е. свойство length в консоли не вывелось, следовательно оно неперечисляемое.

И если посмотреть дескриптор этого свойства, то там тоже указано, что оно неперечисляемое.

Object.getOwnPropertyDescriptor(arr, 'length')
// => {value: 3, writable: true, enumerable: false, configurable: false}

Но

arr.propertyIsEnumerable(length)
// => true

Почему? Это особенность массивов?
  • Вопрос задан
  • 135 просмотров
Решения вопроса 2
0xD34F
@0xD34F Куратор тега JavaScript
arr.propertyIsEnumerable(length)
// => true

Вы тут не свойство length проверяете, а свойство, чьё имя совпадает со значением переменной length - и что у вас в ней лежит, да хрен его знает. Может быть число, соответствующее какому-то индексу массива - тогда неудивительно, что получаете true.

UPD. Могу предположить, что за length там у вас - если вы сами её не объявляли, это window.length.
Ответ написан
Комментировать
Stalker_RED
@Stalker_RED
let arr = ['a', 'b', 'c'];
arr.propertyIsEnumerable('length'); // -> false

Выдыхаем, расходимся.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы