#javascript #arrays
#javascript #массивы
Вопрос:
В Chrome 87 length in array
выдает следующий вывод:
length in ['test']
false
но если мы попробуем с большим количеством элементов, он выдает следующее:
length in ['test', 'test2']
true
Может кто-нибудь объяснить эти разные результаты?
Комментарии:
1. Каково значение
length
?
Ответ №1:
Используемое length
вами значение относится не к 'length'
свойству, а к значению, содержащемуся в глобальном идентификаторе length
, который существует на window
. window.length
это, согласно MDN:
Возвращает количество фреймов (либо
<frame>
элементов, либо<iframe>
элементов) в окне.
Итак, ваш код выдаст этот результат, если у вас есть ровно 1 фрейм или iframe в окне — поскольку второй массив имеет [1]
свойство, но первый массив не имеет [1]
свойства.
Живой фрагмент, иллюстрирующий это:
// NOTE THE EXISTENCE OF ONE IFRAME in the HTML
console.log(length in ['test']);
console.log(length in ['test', 'test2']);
<iframe></iframe>
Аналогично:
const length = 3;
console.log(
length in [0, 1, 2, 3, 4, 5] // true; more than 3 items
);
console.log(
length in [0, 1] // false; less than 3 items
);
Ответ №2:
length
в ваших фрагментах есть переменная, которая, как я полагаю, определена где-то еще и имеет некоторое значение. В зависимости от его значения length in [0, 1]
может возвращать true
или false
. Поскольку вы упомянули Chrome, я предполагаю, что вы используете этот фрагмент в chrome dev tools. В данном случае length
это глобальная переменная (на самом деле, это свойство window: window.length
). Проверьте его значение — это, вероятно 1
. Это объясняет, почему 1 in ['test']
значение равно false (здесь нет элемента с индексом 1
), но 1 in ['test1', 'test2']
равно true.
Если вы хотите проверить наличие свойства «длина», вам нужно иметь его в виде строки:
'length' in []
В этом случае он будет возвращаться true
для любого массива — потому что все массивы имеют свойство «length»