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


Объясните пожалуйста почему? Это особенность массивов?
  • Вопрос задан
  • 131 просмотр
Решения вопроса 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

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

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

Войти через центр авторизации
Похожие вопросы