Почему в некоторых массивах, похоже, есть пары ключ-значение

#node.js

Вопрос:

Я играл с системой регулярных выражений, и одна вещь, которую я заметил, была странной, это то, что я зарегистрировал в консоли такой результат:

 [
    "match",
    "another thing",
    input: "my reg exp"
]
 

но когда я пытаюсь присвоить ему значение переменной, это не работает. Я даже могу получить доступ к этому странному var, как это:

 const weirdVar = func();

console.log(weirdVar[0]); // match
 

Я тоже пытался создать его таким:

 const vari = {
    "a",
    "b",
    input: "lol"
};
 

Кажется, ничего не работает. При этом я также видел, как некоторые функции возвращали это!

 RowDataPacket { id: 'Hello space', message: 'uwu' }
 

Это и массив тоже, я предполагаю, как я могу получить данные с помощью [0]

 [
  RowDataPacket { id: 'Hello space', message: 'uwu' },
  RowDataPacket { id: 'test', message: 'ME' },
  RowDataPacket { id: 'test', message: 'ME' }
]
 

Что это за странный тип данных?

Комментарии:

1. const a = ["a", "b"]; a["input"] = "lol"; console.log(a) .

2. О, злоупотребление массивом, как насчет второго объекта с префиксом RowDataPacket в качестве префикса, что это такое

3. class A { constructor(name) { this.name = name; } }; const a = new A('ME'); console.log(a);

4. Вау, спасибо, тебе не кажется, что ты должен опубликовать это в качестве ответа, чтобы я мог его озвучить?

Ответ №1:

Первая переменная-это массив. Массив также является объектом, что означает, что у него есть ключи атрибутов и значения. Но ключи атрибутов обычного массива-это числа (индекс), и вы можете добавить дополнительный ключ в массив в качестве объекта.

 const arr = ['index 0 value'];
arr[1] = 'index 1 value'; // attribute key is `1`;
arr.input = 'input value';
arr['output'] = 'output value';

console.log(arr);
 

Второй результат- RowDataPacket тип класса es6

 class RowDataPacket {
  constructor(id, message) {
    this.id = id;
    this.message = message;
  }
}

const instance = new RowDataPacket("new id", "new message");

console.log(instance);
console.log([instance]);