Теперь в приведенном выше коде я использовал obj [0], obj 1 (которые являются обозначениями только для массивов)
Нет, это не так.Например:
const obj = {answer: 42, 42: "is the answer"};
const str = "answer";
console.log(obj[str]); // 42
console.log(obj[42]); // is the answer
.... а также obj.index (который не должен был работать для массива)
Да, онидолжен.: -)
Стандартные массивы в javaScript вообще не являются массивами.Это просто объекты, которые:
- Наследуют от
Array.prototype
. - . Имеют специальное поведение для свойства с именем
length
. - . Имеют специальное поведение для свойств.с именами, которые соответствуют определению индекса массива (строка, которая при преобразовании в число
n
находится в диапазоне 0 <= n <2 <sup>32 - 1).Это свойства, которые соответствуют элементам массива.Обычно мы пишем их без кавычек (myArray[0]
), но официально они являются строками. - Имеют собственную буквальную форму (
[]
).
Поскольку они являются объектами,они также могут иметь свойства:
const a = [1, 2, 3];
a.answer = 42;
console.log(a.answer); // 42
Сам JavaScript использует этот факт в нескольких местах (но не во многих), включая, как вы обнаружили, функцию RegExp.prototype.exec
.Другое место в первом аргументе передается функции тега , которая имеет записи для сегментов строки из шаблона и свойство raw
с необработанной версией этих сегментов.
Подробнее о моем анемичном маленьком блоге: Миф о массивах