Масиви JS. Об’єкт JS. Багатовимірні масиви JavaScript

Зворотна стос тарілок: масив в рядок

Стек завжди порівнювали зі стопкою тарілок: кожна нова тарілка лягає тільки зверху і брати можна тільки зверху. Завжди доступна лише верхня тарілка (метод pop) або місце над нею (метод push).

JavaScript розширив цю парадигму і надав можливість роботи зі стопкою тарілок як у класичному варіанті, так і в зворотному: програміст може розглядати початок стопки тарілок як стек через перший елемент. Методи shift і unshift аналогічні pop і push, але працюють з першим елементом.

Масив – це набір значень, а методи join і split – це зв’язок масиву з рядком. Грань між масивом і змінної відсутня. Наступний приклад показує це.

Спочатку був описаний масив aSimple типу «[ … ]», і у нього були реальні три значення. Потім aSimple звернувся в змінну – рядок символів. Потім в aSimple були записані три елементи, які методом join перетворилися в один рядок, а за методом split – створили новий масив aStr, без використання опису «[ … ]».

Реальний стек від дерева DOM

Стек – це не завжди масив, який влаштований звичним чином. Об’єкти – це не завжди методи, що забезпечують доступ до змісту об’єкта, але елементи дерева DOM завжди служать джерелом подій, які обробляє набір функцій на JavaScript.

Якщо представити всі потенційні джерела події одним часовим зрізом в момент виникнення хоча б однієї події, то:

  • може виникнути тільки одна подія;
  • може виникнути два або кілька подій;
  • можливе відвідування цієї сторінки одним або кількома відвідувачами;
  • можливо звернення сервера до клієнта, тобто до браузеру;
  • допустима активність AJAX процесу;
  • можливо, запущений один або кілька таймерів.

Це реальний стек подій серйозного сайту. Реалізувати його в якості масивів або об’єктів практично неможливо. Це зовсім інший рівень програмування, при якому статичний код, тіла функцій і методів мають істотне значення, але не налагодити, ні відстежити якийсь процес неможливо, якщо немає чіткого уявлення про стан і динаміку всієї картини.

Проблема ООП і перевага класичного програмування в тому-то й полягає, що реальне об’єктно-орієнтоване програмування рекурсивно запускає масу об’єктів, які взаємопов’язані один з одним і можуть запускати екземпляри вже працюючих (запущених яким-небудь іншим об’єктом або самим собою) об’єктів.

Розібрати, який саме примірник функціонує за кодом функції або методу, не можна. Код – це статика, а який саме примірник активний – динаміка. Активна точка простору – це статичний код, але рівень рекурсії та стан актуальних даних – реальна проблема.