Давайте подивимося, що такого особливого в JavaScript, чого можна досягти з його допомогою і які інші технології добре з ним працюють.
Що таке JavaScript?
Спочатку JavaScript був створений, щоб зробити веб-сторінку живішою, динамічною.
Програми цією мовою називаються скриптами. Вони мажуть вбудовуватись у HTML та виконуватися автоматично під час завантаження сторінки.
Скрипти поширюються та виконуються як простий текст. Їм не потрібна спеціальна підготовка чи компіліція для запуску.
Це відрізняє JavaScript від іншої мови – Java.
Чому JavaScript?
Коли JavaScript створювався, він мав інше ім’я – «LiveScript». Однак, мова Java була дуже популярна в той час коли зароджувався JavaScript, і було вирішено, що позиціонування JavaScript? як «молодшого брата» Java буде корисниим.
З часом JavaScript став повністю незалежною мовою зі своєю власною специфікацією, що називається ECMAScript і зараз не має жодного відношення до Java.
Сьогодні JavaScript може виконуватися не тільки в браузері, але й на сервері або на будь-якому іншому пристрої, який має спеціальну програму, що називається «движком» JavaScript.
У браузері є свій движок який іноді називають «віртуальна машина JavaScript».
Різні движки мають різні «кодові імена». Наприклад:
- V8 – в Chrome, Opera і Edge.
- SpiderMonkey – в Firefox.
- Chakra для IE, «JavaScriptCore», «Nitro» і «SquirrelFish» для Safari і т.д.
Ці назви корисно знати, оскільки часто використовуються у статтях для розробників. Ми також будемо їх використовувати. Наприклад, якщо «функціональність Х підтримується V8» тоді «Х» швидше за все працює в Chrome, Opera та Edge.
Як працюють движки?
- Движок (вбудований, якщо це браузер) читає (парсить) текст скрипта.
- Потім він перетворює («компілює») скрипт на машинну мову.
- Після цього машинний код запускається та працює досить швидко.
Движок застосовує оптимізації на кожному етапі. Він навіть переглядає скомпільований скрипт під час його роботи, аналізуючи дані, що проходять через нього, і застосовує оптимізації до машинного коду, покладаючить на отримані знання. В результаті скрипти працюють дуже швидко.
Що може JavaScript у браузері?
Сучасний JavaScript – це «безпечна» мова програмування. Він не надає низькорівневий доступ до пам’яті або процесора, тому що спочатку був створений для браузерів, які цього не вимагають.
Можливості JavaScript сильно залежать від оточення, де він працює. Наприклад, Node.JS підтримує функції читання/запису довільних файлів, виконання мережевих запитів тощо.
У браузері для JavaScript є все, що пов’язано з маніпулюванням веб-сторінки, взаємодією з користувачем і веб-сервером.
Наприклад, у браузері JavaScript може:
- Додавати новий HTML-код на сторінку, змінювати існуючий вміст, модифікувати стилі.
- Реагувати на дії користувача, натискання миші, переміщення вказівника, натискання клавіш.
- Надсилати мережеві запити на віддалені сервери, завантажувати файли (технологіії AJAX та COMET).
- Отримувати та встановлювати куки, ставити запитання відвідувачу, показувати повідомлення.
- Запам’ятовувати дані за клієнта («local storage»).
Чого не може JavaScript у браузері?
Можливості JavaScript у браузері обмежені задля безпеки користувача. Мета полягає в запобіганні доступу недобросовісної веб-сторінки до особистої інформації або заподіянні шкоди даним користувача.
До таких обмежень включають:
- JavaScript на веб-сторінці не може читати/записувати довільні файли на жорсткому диску, копіювати або запускати програми. Він не має прямого доступу до системних функції ОС.
Сучасні браузери дозволяють йому працювати з файлами, але з обмеженим доступом і надають його тільки якщо користувач виконує певні дії, такі як «перетягування» файлу у вікно браузера або його вибір за допомогою тега <input>.
Існують способи взаємодії з камерою/мікрофоном та іншими пристроями, але вони требують явного дозволу користувача. Таким чином, сторінка з підтримкою JavaScript не може непомітно включити веб-камеру. - Різні вікна/вкладки не знають одне про одного. Іноді одне вікно, використовуючи JavaScript відкриває інше вікно. Але навіть у цьому випадку JavaScript з однієї сторінки не має доступу до іншої, якщо вони прийшли з різних сайтів (з іншого домену, протоколу чи порту).
Це називається «Політика однакового джерела» (Same Origin Policy). Щоб обійти це обмеження, обидві сторінки повинні погодитися з цим і містити JavaScript-код, який спеціально обмінюється даними.
Це обмеження необхідно, знову ж таки, для безпеки користувача. Сторінка https://anysite.com, яку відкрив користувач, не повинна мати доступу до іншої вкладки браузера з URL https://gmail.com та брати інформацію звідти. - JavaScript може легко взаємодіяти з сервером, з якого надійшла поточна сторінка. Але його здатність отримувати дані з інших сайтів/доменів обмежена. Хоча це можливо в принципі, для чого потрібна явна згода (виражена в заголовках HTTP) із віддаленою стороною. Знову ж таки, це обмеження безпеки.

Подібні обмеження не діють, якщо JavaScript використовується поза браузером, наприклад, на сервері. Сучасні браузери надають плагіни/розширення за допомогою яких можна вимагати додаткові дозволи.
Що робить JavaScript особливим?
Як мінімум JavaScript має три сильні сторни:
- Повна інтеграція з HTML/CSS.
- Прості речі робляться просто.
- Підтримується всіма основними браузерами та включений за замовчуванням.
JavaScript – це єдина браузерна технологія, що поєднує всі ці три речі.
Ось що робить JavaScript особливим. Ось чому це найпоширеніший інструмент для створення інтерфейсів у браузері.
Хоча, звичайно, JavaScript дозволяє робити програми не тільки в браузерах, а й на сервері, мобільних пристроях і т. п.
Мови «над» JavaScript
Синтаксис JavaScript підходить не під всі потреби користувача. Тому що проекти бувають різними та вимоги до них теж різні.
Так, останнім часом з’явилося багато нових мов, які транспілюються (конвертуються) у JavaScript, перш ніж запустяться у браузері.
Сучасні інструменти роблять транспіляцію дуже швидкою та прозорою, фактично дозволяючи розробникам писати код іншою мовою автоматично перетворюючи його на JavaScript «під капотом».
Приклади таких програм:
- CoffeeScript додає «синтаксичний цукор» для JavaScript. Він вводить коротший синтаксис, який дозволяє писати чистий і лаконічний код. Зазвичай таке рішення подобається Ruby-програмістам.
- TypeScript концентрується на додаванні «суворої типізації» для спрощення розробки та підтримки великих та складних систем. Розроблено в Microsoft.
- Flow також додає типізацію, але інакше. Розроблено в Facebook.
- Dart стоїть окремо, тому що має власний движок, що працює поза браузером (наприклад, у мобільних додатках). Спочатку було запропоновано Google як заміну JavaScript, але на даний момент необхідна його транспіляція для запуску так само, як для вищеперелічених мов.
- Brython транспілює Python у JavaScript, що дозволяє писати програми на чистому Python без JavaScript.
Є й інші мови. Але навіть якщо ми використовуємо одну з цих мов, ми повинні знати JavaScript, щоб дійсно розуміти, що ми робими.
Висновки
- JavaScript спочатку створювався тільки для браузера, але зараз використовується на багатьох інших платформах.
- Сьогодні JavaScript займає унікальну позицію як найпошириніша мова для браузера, що має повну інтеграцію з HTML/CSS.
- Багато мов можуть бути «транспільовані» до JavaScript для надання додаткових функцій. Рекомендується принаймні коротко розглянути їх після освоєння JavaScript.