Відмінності між версіями «JavaScript»

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до: навігація, пошук
[перевірена версія][перевірена версія]
(test)
(Все застаріло. Додані сучасні інструменти на Javascript, описи нових версії ECMAScript, видалені дані про Internet Explorer, який майже зник.)
 
Рядок 7: Рядок 7:
 
| designer = [[Брендан Айк]]
 
| designer = [[Брендан Айк]]
 
| developer = [[Netscape Communications Corporation]], [[Mozilla Foundation]]
 
| developer = [[Netscape Communications Corporation]], [[Mozilla Foundation]]
| latest_release_version = ECMAScript 6<ref>{{cite web|url=https://developer.mozilla.org/en/JavaScript/New_in_JavaScript/1.8.5 |title=New in JavaScript 1.8.5 &#124; Mozilla Developer Network |publisher=Developer.mozilla.org |date=2012-11-18 |accessdate=2013-05-26}}</ref>
+
| latest_release_version = ECMAScript 2017<ref>{{cite web|url=https://developer.mozilla.org/pl/docs/Web/JavaScript/New_in_JavaScript/ECMAScript_Next_support_in_Mozilla#ECMAScript_2017}}</ref>
| latest_release_date = {{start date|2015|6|17}}
+
| latest_release_date = {{start date|2017|6}}
 
| latest_preview_version =
 
| latest_preview_version =
 
| latest_preview_date = {{start date|2010|7|27}}
 
| latest_preview_date = {{start date|2010|7|27}}
Рядок 14: Рядок 14:
 
| implementations = [[KJS (KDE)|KJS]], [[Rhino]], [[SpiderMonkey]], [[V8 (рушій JavaScript)|V8]], [[Presto (Opera)|Carakan]], [[Chakra|Chakra (Microsoft)]]
 
| implementations = [[KJS (KDE)|KJS]], [[Rhino]], [[SpiderMonkey]], [[V8 (рушій JavaScript)|V8]], [[Presto (Opera)|Carakan]], [[Chakra|Chakra (Microsoft)]]
 
| influenced_by = [[Scheme]], [[Self (мова програмування)|Self]], [[Java (мова програмування)|Java]], [[C (мова програмування)|C]], [[Python (мова програмування)|Python]]
 
| influenced_by = [[Scheme]], [[Self (мова програмування)|Self]], [[Java (мова програмування)|Java]], [[C (мова програмування)|C]], [[Python (мова програмування)|Python]]
| influenced = [[ActionScript]], [[CoffeeScript]], [[Dart (мова програмування)|Dart]], [[JScript|JScript .NET]], [[Objective-J]], [[QML]], [[TypeScript]], [[Node.js]], [[LiveScript]]
+
| influenced = [[ActionScript]], [[CoffeeScript]], [[Dart (мова програмування)|Dart]], [[JScript|JScript .NET]], [[Objective-J]], [[QML]], [[TypeScript]], [[LiveScript]]
 
| license =
 
| license =
 
| website =
 
| website =
Рядок 50: Рядок 50:
 
}}
 
}}
   
'''JavaScript''' ('''JS''')&nbsp;— динамічна, [[Об'єктно-орієнтоване програмування|об'єктно-орієнтована]]<ref name="ECMA-262">{{cite web|url=http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-262.pdf | title= ECMAScript Language Specification }}</ref> [[мова програмування]]. Реалізація стандарту [[ECMAScript]]. Найчастіше використовується як частина [[Браузер|браузера]], що надає можливість коду на стороні [[Клієнт-серверна архітектура|клієнта]] (такому, що виконується на пристрої кінцевого користувача) взаємодіяти з користувачем, керувати браузером, [[AJAX|асинхронно]] обмінюватися даними з [[Клієнт-серверна архітектура|сервером]], змінювати [[Об'єктна модель документа|структуру]] та [[Веб-дизайн|зовнішній вигляд]] [[Веб-сторінка|веб-сторінки]]. Мова JavaScript також використовується для [[програмування]] на стороні сервера (подібно до таких мов програмування, як [[Java]] і [[C Sharp|C#]]), розробки [[Комп'ютерні ігри|ігор]], стаціонарних та мобільних додатків, сценаріїв в прикладному [[ПЗ]] (наприклад, в програмах зі складу [[Adobe Creative Suite]]), всередині [[PDF]]-документів тощо.
+
'''JavaScript''' ('''JS''')&nbsp;— динамічна, [[Об'єктно-орієнтоване програмування|об'єктно-орієнтована]]<ref name="ECMA-262">{{cite web|url=http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-262.pdf | title= ECMAScript Language Specification }}</ref> [[мова програмування]]. Реалізація стандарту [[ECMAScript]]. Найчастіше використовується для створення сценаріїв [[Веб-сторінка|веб-сторінок]], що надає можливість на стороні [[Клієнт-серверна архітектура|клієнта]] (пристрої кінцевого користувача) взаємодіяти з користувачем, керувати браузером, [[AJAX|асинхронно]] обмінюватися даними з [[Клієнт-серверна архітектура|сервером]], змінювати [[Об'єктна модель документа|структуру]] та [[Веб-дизайн|зовнішній вигляд]] [[Веб-сторінка|веб-сторінки]].
   
 
JavaScript класифікують як [[Прототипне програмування|прототипну]] (підмножина [[Об'єктно-орієнтоване програмування|об'єктно-орієнтованої]]), [[Скриптова мова|скриптову мову]] програмування з динамічною типізацією. Окрім прототипної, JavaScript також частково підтримує інші парадигми програмування ([[Імперативне програмування|імперативну]] та частково [[Функціональне програмування|функціональну]]) і деякі відповідні архітектурні властивості, зокрема: [[Динамічна типізація|динамічна]] та [[Слабка типізація|слабка]] [[Система типізації|типізація]], автоматичне керування пам'яттю, прототипне [[Наслідування (програмування)|наслідування]], [[Функція (програмування)|функції]] як [[Об'єкт першого класу|об'єкти першого класу]].
 
JavaScript класифікують як [[Прототипне програмування|прототипну]] (підмножина [[Об'єктно-орієнтоване програмування|об'єктно-орієнтованої]]), [[Скриптова мова|скриптову мову]] програмування з динамічною типізацією. Окрім прототипної, JavaScript також частково підтримує інші парадигми програмування ([[Імперативне програмування|імперативну]] та частково [[Функціональне програмування|функціональну]]) і деякі відповідні архітектурні властивості, зокрема: [[Динамічна типізація|динамічна]] та [[Слабка типізація|слабка]] [[Система типізації|типізація]], автоматичне керування пам'яттю, прототипне [[Наслідування (програмування)|наслідування]], [[Функція (програмування)|функції]] як [[Об'єкт першого класу|об'єкти першого класу]].
   
  +
Мова JavaScript використовується для:
  +
* написання сценаріїв [[Веб-сторінка|веб-сторінок]] для надання їм інтерактивності;
  +
* створення одностоінкових веб-додатків ([[ReactJS]], [[AngularJS]], [[Vue.js]]);
  +
* [[програмування]] на стороні сервера ([[Node.js]]);
  +
* стаціонарних додатків ([https://electron.atom.io/ Electron], [https://nwjs.io/ NW.js]);
  +
* мобільних додатків ([https://facebook.github.io/react-native/ React Native], [https://cordova.apache.org/ Cordova]);
  +
* сценаріїв в прикладному [[ПЗ]] (наприклад, в програмах зі складу [[Adobe Creative Suite]]);
  +
* всередині [[PDF]]-документів тощо.
 
Незважаючи на схожість назв, мови [[Java]] та JavaScript є двома різними мовами, що мають відмінну [[Семантика мов програмування|семантику]], хоча й мають схожі риси в [[стандартна бібліотека|стандартних бібліотеках]] та правилах іменування. [[Синтаксис мови програмування|Синтаксис]] обох мов отриманний «у спадок» від мови [[C (мова програмування)|С]], але семантика та дизайн JavaScript є результатом впливу мов [[Self (мова програмування)|Self]] та [[Scheme]].<ref>{{cite web|title=ECMAScript Language Overview|url=http://www.ecmascript.org/es4/spec/overview.pdf|format=PDF|page=4|date=2007-10-23|accessdate=2009-05-03}}</ref>
 
Незважаючи на схожість назв, мови [[Java]] та JavaScript є двома різними мовами, що мають відмінну [[Семантика мов програмування|семантику]], хоча й мають схожі риси в [[стандартна бібліотека|стандартних бібліотеках]] та правилах іменування. [[Синтаксис мови програмування|Синтаксис]] обох мов отриманний «у спадок» від мови [[C (мова програмування)|С]], але семантика та дизайн JavaScript є результатом впливу мов [[Self (мова програмування)|Self]] та [[Scheme]].<ref>{{cite web|title=ECMAScript Language Overview|url=http://www.ecmascript.org/es4/spec/overview.pdf|format=PDF|page=4|date=2007-10-23|accessdate=2009-05-03}}</ref>
   
Рядок 70: Рядок 78:
 
Четверта версія стандарту ECMAScript так і не була закінчена і четверта редакція не вийшла<ref>{{cite web|url=http://www.ecmascript.org/docs.php |title=Documentation |publisher=ECMAScript |accessdate=2014-04-13}}</ref>. Тим не менш, п'ята редакція з'явилася в грудні 2009 року.
 
Четверта версія стандарту ECMAScript так і не була закінчена і четверта редакція не вийшла<ref>{{cite web|url=http://www.ecmascript.org/docs.php |title=Documentation |publisher=ECMAScript |accessdate=2014-04-13}}</ref>. Тим не менш, п'ята редакція з'явилася в грудні 2009 року.
   
На сьогодні, актуальна версія стандарту&nbsp;— 5.1. Вона була випущена в червні 2011 року.<ref>{{cite web|url=http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf |title=Standard ECMA-262 |format=PDF |accessdate=2013-05-26}}</ref>
+
У червні 2015 року<ref>{{Cite news|url=https://tproger.ru/translations/wtf-is-ecmascript/|title=ES6, ES8, ES2017: что такое ECMAScript и чем это отличается от JavaScript|date=2017-09-07|language=ru-RU|work=Tproger|accessdate=2017-10-08}}</ref> вийшла версія шоста версія, починаючи з якої комітет [[ECMAScript]] прийняв рішення перейти на щорічны оновлення і нова версія отримала назву ES2015. Вона отримала цілу низку нововведень, серед яких: об'єкт Promise для зручного асихронного виконування коду, деструктурірующее присвоювання, стрілочні функції, функції-генератори, шаблонні рядки, оператори оголошення змінних let та const тощо.
  +
  +
Версія ES2016 вийшла у червні 2016 року, серед нововведень оператор піднесення до степеня ** та метод Array.prototype.includes, який перевіряє, чи міститься переданий аргумент в масиві.
  +
  +
Версія ES2017, що вийшла в червні 2017 року і на сьогодні є актуальною версією стандарту додала можливість використання асихронних функцій, «висячих» ком в параметрах функцій, об'єкт Atomics, декільких нових методів для роботи з рядками.
   
 
=== Актуальний стан ===
 
=== Актуальний стан ===
JavaScript, наразі, є однією з найпопулярніших мов програмування в [[інтернет]]і. Але спочатку багато професіональних програмістів скептично ставилися до мови, цільова аудиторія якої складалася з програмістів-любителів<ref>{{cite web|url=http://www.crockford.com/javascript/javascript.html |title=JavaScript: The World's Most Misunderstood Programming Language |publisher=Crockford.com |accessdate=2009-05-19}}</ref>. Поява [[AJAX]] змінила ситуацію та повернула увагу професійної спільноти до мови. В результаті, були розроблені та покращені багато практик використання JavaScript (зокрема, [[Тестування програмного забезпечення|тестування]] та [[Налагодження програм|налагодження]]), створені бібліотеки та [[Програмний каркас|фреймворки]], поширилося використання JavaScript поза браузером.
+
JavaScript, наразі, є однією з найпопулярніших мов програмування в [[інтернет]]і<ref>{{Cite news|url=https://habrahabr.ru/post/310262/|title=15 самых популярных языков программирования по версии GitHub|language=ru-RU|accessdate=2017-10-08}}</ref>. Але спочатку багато професіональних програмістів скептично ставилися до мови, цільова аудиторія якої складалася з програмістів-любителів<ref>{{cite web|url=http://www.crockford.com/javascript/javascript.html |title=JavaScript: The World's Most Misunderstood Programming Language |publisher=Crockford.com |accessdate=2009-05-19}}</ref>. Поява [[AJAX]] змінила ситуацію та повернула увагу професійної спільноти до мови, а подальші модифікації мови за стандартами ES2015 та ES2017 внесли багато корисних можливостей, яких не вистачало для ефективного програмування. В результаті, були розроблені та покращені багато практик використання JavaScript (зокрема, [[Тестування програмного забезпечення|тестування]] та [[Налагодження програм|налагодження]]), створені бібліотеки та [[Програмний каркас|фреймворки]], поширилося використання JavaScript поза браузером.
   
 
== Про мову ==
 
== Про мову ==
Рядок 91: Рядок 99:
   
 
Приклад оголошення і використання класу в JavaScript (клас є одночасно функцією, оскільки функції&nbsp;— це об'єкти першого рівня):
 
Приклад оголошення і використання класу в JavaScript (клас є одночасно функцією, оскільки функції&nbsp;— це об'єкти першого рівня):
<source lang=javascript>
+
<source lang="javascript">
function MyClass()
+
function MyClass() {
{
 
 
this.myValue1 = 1;
 
this.myValue1 = 1;
 
this.myValue2 = 2;
 
this.myValue2 = 2;
Рядок 125: Рядок 133:
 
При розробці великих і нетривіальних [[веб-застосунок|веб-застосунків]] з використанням JavaScript, критично важливим є доступ до інструментів [[зневадження]]. Оскільки браузери від різних виробників дещо відрізняються у поведінці JavaScript і реалізації [[DOM|Об'єктної Моделі Документа]], треба мати в руках [[зневаджувач]] для кожного браузера, якщо веб-застосування орієнтовано на нього.
 
При розробці великих і нетривіальних [[веб-застосунок|веб-застосунків]] з використанням JavaScript, критично важливим є доступ до інструментів [[зневадження]]. Оскільки браузери від різних виробників дещо відрізняються у поведінці JavaScript і реалізації [[DOM|Об'єктної Моделі Документа]], треба мати в руках [[зневаджувач]] для кожного браузера, якщо веб-застосування орієнтовано на нього.
   
На даний час [[Internet Explorer]], [[Firefox]], [[Opera]], [[Google Chrome]] та [[Safari]] мають зневаджувачі для себе.
+
На даний час [[Firefox]], [[Opera]], [[Google Chrome]], [[Microsoft Edge|Edge]] та [[Safari]] мають зневаджувачі для себе.
   
Internet Explorer має три зневаджувача для себе: [[Microsoft Visual Studio]] є найпотужнішим з цих трьох, слідом йде Microsoft Script Editor (компонента [[Microsoft Office]]<ref>[http://msdn2.microsoft.com/en-us/library/aa202668(office.11).aspx JScript development in Microsoft Office 11] (MS InfoPath 2003)</ref>), і нарешті існує безкоштовний Microsoft Script Debugger з базовими функціями. Веб-застосування для [[Firefox]] допоможе привести до розуму додаток [[Firebug]] (зручно вбудований безпосередньо в браузер), або давніший відладчик Venkman, котрий також працює з браузером [[Mozilla]]. Drosera&nbsp;— це зневаджувач з WebKit engine<ref>[http://webkit.org/blog/61/introducing-drosera/ Introducing Drosera&nbsp;— Surfin' Safari]</ref>, що супроводжує Apple Safari.
+
Також існують такі корисні інструменти, як:
+
* [https://eslint.org/ ESLint] — перевірка якості коду, що сканує JavaScript програму, шукаючи проблеми коду;
Також існують кілька інструментів, як вільних, наприклад JSLint<ref>[http://www.jslint.com/lint.html JSLint help page]</ref>, інструмент перевірки якості коду, що сканує JavaScript програму, шукаючи проблеми коду, так і комерційних продуктів типу інструменту з назвою JavaScript Debugger.
+
* [https://prettier.io/ Prettier] автоматичне форматування коду у корректний вигляд;
+
* [https://babeljs.io/ Babel] — транспайлер Javascipt коду до більш старих версій стандартів [[ECMAScript]], що допомагає розробникам використовувати найновіші можливості мови для оточення, що не встигло реалізовати останній стандарт.
Оскільки JavaScript є інтерпретатором, без строгої типізації, і може виконуватися в різних середовищах, кожне зі своїми власними особливостями сумісності, програміст має бути дуже уважним, і повинен перевіряти, що його код виконується як очікується в широкому переліку можливих конфігурацій. Дуже часто трапляються випадки, коли скрипт, що чудово працює в одному середовищі, видає некоректні результати в іншому.
+
Оскільки JavaScript є інтерпретатором, без строгої типізації, і може виконуватися в різних середовищах, кожне зі своїми власними особливостями сумісності, програміст має бути дуже уважним, і повинен перевіряти, що його код виконується як очікується в широкому переліку можливих конфігурацій.
   
 
Кожен блок сценарію інтерпретатор розбирає окремо. На веб-сторінках, коли треба комбінувати блоки JavaScript та [[HTML]], синтаксичні помилки знайти легше, якщо тримати функції сценарію в окремому блоці коду, або (ще краще) використовувати багато малих пов'язаних .js файлів. В такий спосіб синтаксична помилка не спричинятиме «падіння» цілої сторінки, і можна надати допомогу, елегантно вийшовши зі сторінки.
 
Кожен блок сценарію інтерпретатор розбирає окремо. На веб-сторінках, коли треба комбінувати блоки JavaScript та [[HTML]], синтаксичні помилки знайти легше, якщо тримати функції сценарію в окремому блоці коду, або (ще краще) використовувати багато малих пов'язаних .js файлів. В такий спосіб синтаксична помилка не спричинятиме «падіння» цілої сторінки, і можна надати допомогу, елегантно вийшовши зі сторінки.
 
== Версії ==
 
{| class="wikitable"
 
!JavaScript
 
!JScript
 
!ECMAScript
 
|-
 
|1.0 (Netscape 2.0, березень 1996)
 
|1.0 (ранні версії IE 3.0, серпень 1996)
 
|
 
|-
 
|1.1 (Netscape 3.0, серпень 1996)
 
|2.0 (пізні версії IE 3.0, січень 1997)
 
|
 
|-
 
|1.2 (Netscape 4.0, червень 1997)
 
|
 
|
 
|-
 
|1.3 (Netscape 4.5, жовтень 1998)
 
|3.0 (IE 4.0, жовтень 1997)
 
|Редакція 1 (червень 1997) / редакція 2 (червень 1998)
 
|-
 
|1.4 (тільки Netscape Server)
 
|4.0 (Visual Studio 6, нема версії IE)
 
|
 
|-
 
|
 
|5.0 (IE 5.0, березень 1999)
 
|
 
|-
 
|
 
|5.1 (IE 5.01)
 
|
 
|-
 
|1.5 (Netscape 6.0, листопад 2000; також <br/>пізні версії Netscape і [[Mozilla]])
 
|5.5 (IE 5.5, липень 2000)
 
|Редакція 3 (грудень 1999)
 
|-
 
|
 
|5.6 (IE 6.0, жовтень 2001)
 
|
 
|-
 
|1.6 (Gecko 1.8, [[Mozilla Firefox|Firefox]] 1.5, листопад 2005)
 
|
 
|Редакція 3 з деякими сумісними поліпшеннями: [[E4X]], доповнення до <code>Array</code> (наприклад, <code>Array.prototype.forEach</code>), спрощення для <code>Array</code> і <code>String</code> [http://developer.mozilla.org/en/docs/New_in_JavaScript_1.6]{{ref-en}}
 
|-
 
|1.7 (Gecko 1.8.1, Firefox 2.0, осінь 2006), розширення JavaScript 1.6 |
 
|Редакція 3, з додаванням всіх поліпшень з JavaScript 1.6, генераторів і облікових виразів (list comprehensions, <code>[a*a for (а in iter)]</code>) з [[Python]], блокових областей з використанням <code>let</code> і деструктуруючих присвоєнь (<code>var [а,b]=[1,2]</code>) [http://developer.mozilla.org/en/docs/New_in_JavaScript_1.7]{{ref-en}}
 
|-
 
|
 
|[[JScript .NET]] ([[ASP.NET]]; нема версії IE)
 
|(Вважається, що JScript .NET розроблений за участі інших членів [[ECMA]])
 
|-
 
|2.0 (стара [http://www.mozilla.org/js/language/js20/index.html пропозиція Netscape])
 
|
 
|Редакція 4 (у розробці)
 
|}
 
   
 
== Примітки ==
 
== Примітки ==

Поточна версія на 12:51, 8 жовтня 2017

JavaScript
Unofficial JavaScript logo 2.svg
Скриптова мова, обчислювальна платформа, Інтерпретована мова програмування, мультипарадигмальна мова програмування, prototype-based programming language[d], імперативна мова програмування, мова функціонального програмування і event-driven programming language[d]
Парадигма: імперативна, елементи функціональної, об'єктно-орієнтована (прототип-орієнтована)
Дата появи: 1995
Творці: Брендан Айк
Розробник: Netscape Communications Corporation, Mozilla Foundation
Останній реліз: ECMAScript 2017[1] (червня 2017)
Тестова версія: (27 липня 2010)
Система типізації: динамічна, качина
Основні реалізації: KJS, Rhino, SpiderMonkey, V8, Carakan, Chakra (Microsoft)
Під впливом від: Scheme, Self, Java, C, Python
Вплинула на: ActionScript, CoffeeScript, Dart, JScript .NET, Objective-J, QML, TypeScript, LiveScript
Звичайні розширення файлів: js[2]
Сайт: developer.mozilla.org/en-US/docs/Web/JavaScript
CMNS: JavaScript на Вікісховищі
JavaScript
Javascript icon.svg
Розширення файлу: .js
MIME-тип: application/javascript
text/javascript (застаріла)[3]
Uniform Type Identifier: com.netscape.javascript-source[4]
Тип формату: текстовий файл

JavaScript (JS) — динамічна, об'єктно-орієнтована[5] мова програмування. Реалізація стандарту ECMAScript. Найчастіше використовується для створення сценаріїв веб-сторінок, що надає можливість на стороні клієнта (пристрої кінцевого користувача) взаємодіяти з користувачем, керувати браузером, асинхронно обмінюватися даними з сервером, змінювати структуру та зовнішній вигляд веб-сторінки.

JavaScript класифікують як прототипну (підмножина об'єктно-орієнтованої), скриптову мову програмування з динамічною типізацією. Окрім прототипної, JavaScript також частково підтримує інші парадигми програмування (імперативну та частково функціональну) і деякі відповідні архітектурні властивості, зокрема: динамічна та слабка типізація, автоматичне керування пам'яттю, прототипне наслідування, функції як об'єкти першого класу.

Мова JavaScript використовується для:

Незважаючи на схожість назв, мови Java та JavaScript є двома різними мовами, що мають відмінну семантику, хоча й мають схожі риси в стандартних бібліотеках та правилах іменування. Синтаксис обох мов отриманний «у спадок» від мови С, але семантика та дизайн JavaScript є результатом впливу мов Self та Scheme.[6]

Історія[ред.ред. код]

Поява в Netscape[ред.ред. код]

1995 року компанія Netscape поставила завдання вбудувати мову програмування Scheme чи «якусь схожу» в браузер Netscape. Для цього був запрошений Брендан Айк, американський розробник, що спеціалізувався на системному програмуванні. Також, для прискорення розробки, Netscape почали співробітництво з компанією Sun Microsystems.

З часом, концепція розроблюваної мови програмування була розширена до можливості використання безпосередньо в HTML-коді сторінки. Компанії мали на меті створити мову, що могла зв'язати різні частини веб-сайтів: зображень, Java-аплетів, об'єктної моделі документа. Ця мова повинна була стати зручною для веб-дизайнерів та некваліфікованих програмістів. Робочою назвою нової мови була Mocha, яка була змінена на LiveScript в перших двох бета-версіях браузера Netscape 2.0. А дещо пізніше, користуючись популярністю бренду Java, LiveScript був перейменований на JavaScript і третя бета-версія (2.0B3) Netscape 2.0 вже вийшла з сучасною назвою[7][8]. Для цього була придбана відповідна ліцензія у компанії Sun Microsystems, що володіла брендом Java.

1992 року компанією Nombas була розроблена скриптова мова програмування Cmm (англ. С-minus-minus, гра слів навколо мови С++), яка пізніше була перейменована на ScriptEase та могла вбудовуватися в веб-сторінки. Існує хибна думка, що JavaScript був створений під впливом Cmm. Насправді, Брендан Айк ніколи не чув про Cmm до того, як він створив LiveScript[9]. Пізніше, Nombas зупинили розробку Cmm та почали використовувати JavaScript, а згодом брали участь у групі зі стандартизації JavaScript.

Стандартизація[ред.ред. код]

У листопаді 1996 року Netscape заявила, що відправила JavaScript в організацію Ecma International для розгляду мови як промислового стандарту. В результаті подальшої роботи з'явилась стандартизована мова з назвою ECMAScript. У червні 1997 року, Ecma International опублікувала першу редакцію специфікації ECMA-262. Рік по тому, у червні 1998 року, щоб адаптувати специфікацію до стандарту ISO/IEC-16262, були внесені деякі зміни і випущена друга редакція. Третя редакція побачила світ в грудні 1999 року.[10]

Четверта версія стандарту ECMAScript так і не була закінчена і четверта редакція не вийшла[11]. Тим не менш, п'ята редакція з'явилася в грудні 2009 року.

У червні 2015 року[12] вийшла версія шоста версія, починаючи з якої комітет ECMAScript прийняв рішення перейти на щорічны оновлення і нова версія отримала назву ES2015. Вона отримала цілу низку нововведень, серед яких: об'єкт Promise для зручного асихронного виконування коду, деструктурірующее присвоювання, стрілочні функції, функції-генератори, шаблонні рядки, оператори оголошення змінних let та const тощо.

Версія ES2016 вийшла у червні 2016 року, серед нововведень оператор піднесення до степеня ** та метод Array.prototype.includes, який перевіряє, чи міститься переданий аргумент в масиві.

Версія ES2017, що вийшла в червні 2017 року і на сьогодні є актуальною версією стандарту додала можливість використання асихронних функцій, «висячих» ком в параметрах функцій, об'єкт Atomics, декільких нових методів для роботи з рядками.

Актуальний стан[ред.ред. код]

JavaScript, наразі, є однією з найпопулярніших мов програмування в інтернеті[13]. Але спочатку багато професіональних програмістів скептично ставилися до мови, цільова аудиторія якої складалася з програмістів-любителів[14]. Поява AJAX змінила ситуацію та повернула увагу професійної спільноти до мови, а подальші модифікації мови за стандартами ES2015 та ES2017 внесли багато корисних можливостей, яких не вистачало для ефективного програмування. В результаті, були розроблені та покращені багато практик використання JavaScript (зокрема, тестування та налагодження), створені бібліотеки та фреймворки, поширилося використання JavaScript поза браузером.

Про мову[ред.ред. код]

JavaScript має низку властивостей об'єктно-орієнтованої мови, але завдяки концепції прототипів підтримка об'єктів в ній відрізняється від традиційних мов ООП. Крім того, JavaScript має ряд властивостей, притаманних функціональним мовам, — функції як об'єкти першого класу, об'єкти як списки, каррінг, анонімні функції, замикання (closures) — що додає мові додаткову гнучкість.

JavaScript має C-подібний синтаксис, але в порівнянні з мовою Сі має такі корінні відмінності:

JavaScript містить декілька вбудованих об'єктів: Global, Object, Error, Function, Array, String, Boolean, Number, Math, Date, RegExp. Крім того, JavaScript містить набір вбудованих операцій, які, строго кажучи, не обов'язково є функціями або методами, а також набір вбудованих операторів, що управляють логікою виконання програм. Синтаксис JavaScript в основному відповідає синтаксису мови Java (тобто, зрештою, успадкований від C), але спрощений порівняно з ним, щоб зробити мову сценаріїв легкою для вивчення. Так, приміром, декларація змінної не містить її типу, властивості також не мають типів, а декларація функції може стояти в тексті програми після неї

Семантика мови схожа з семантикою мови Self.

Приклад оголошення і використання класу в JavaScript (клас є одночасно функцією, оскільки функції — це об'єкти першого рівня):

 function MyClass() {
   this.myValue1 = 1;
   this.myValue2 = 2;
 }

 var mc = new MyClass();
 mc.myValue1 = mc.myValue2 * 2;

Одна з популярних технологій, що дозволила зробити сторінки динамічнішими і забезпечити нові можливості — це динамічне завантаження і вставка даних в документ, що отримала назву AJAX.

Використання в HTML[ред.ред. код]

При використанні в рамках технології DHTML JavaScript код включається в HTML-код сторінки і виконується інтерпретатором, вбудованим в браузер. Код JavaScript вставляється в теги <script></script> з обов'язковим по специфікації HTML 4.01 атрибутом type="text/javascript", хоча в більшості браузерів мова сценаріїв за умовчанням саме JavaScript.

Скрипт, що виводить модальне вікно з класичним написом «Hello, World!» усередині браузера:

<script type="text/javascript">
  alert('Hello, World!');
</script>

Слідуючи концепції інтеграції JavaScript в існуючі системи, браузери підтримують включення скрипта, наприклад, в значення атрибуту події:

 <a href="delete.php" onclick="return confirm('Ви впевнені?');">Видалити</a>

Тут при натисненні на посилання функція confirm('Ви впевнені?'); викликає модальне вікно з написом «Ви впевнені?», а return false; блокує перехід за посиланням. Зрозуміло, цей код працюватиме тільки якщо в браузері є і включена підтримка JavaScript, інакше перехід за посиланням відбудеться без попередження.

Є і третя можливість підключення JavaScript — написати скрипт в окремому файлі, а по тому підключити його за допомогою конструкції:

<script type="text/javascript" src="http://Шлях_до_файла_зі_скриптом"></script>

Зневадження[ред.ред. код]

При розробці великих і нетривіальних веб-застосунків з використанням JavaScript, критично важливим є доступ до інструментів зневадження. Оскільки браузери від різних виробників дещо відрізняються у поведінці JavaScript і реалізації Об'єктної Моделі Документа, треба мати в руках зневаджувач для кожного браузера, якщо веб-застосування орієнтовано на нього.

На даний час Firefox, Opera, Google Chrome, Edge та Safari мають зневаджувачі для себе.

Також існують такі корисні інструменти, як:

  • ESLint — перевірка якості коду, що сканує JavaScript програму, шукаючи проблеми коду;
  • Prettier — автоматичне форматування коду у корректний вигляд;
  • Babel — транспайлер Javascipt коду до більш старих версій стандартів ECMAScript, що допомагає розробникам використовувати найновіші можливості мови для оточення, що не встигло реалізовати останній стандарт.

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

Кожен блок сценарію інтерпретатор розбирає окремо. На веб-сторінках, коли треба комбінувати блоки JavaScript та HTML, синтаксичні помилки знайти легше, якщо тримати функції сценарію в окремому блоці коду, або (ще краще) використовувати багато малих пов'язаних .js файлів. В такий спосіб синтаксична помилка не спричинятиме «падіння» цілої сторінки, і можна надати допомогу, елегантно вийшовши зі сторінки.

Примітки[ред.ред. код]

  1. https://developer.mozilla.org/pl/docs/Web/JavaScript/New_in_JavaScript/ECMAScript_Next_support_in_Mozilla#ECMAScript_2017.  Пропущений або порожній |title= (довідка)
  2. https://www.iana.org/assignments/media-types/application/javascript
  3. RFC 4329. tools.ietf.org. 
  4. System-Declared Uniform Type Identifiers. Mac OS X Reference Library. Apple Inc. Процитовано 2010-03-05. 
  5. ECMAScript Language Specification. 
  6. ECMAScript Language Overview (PDF). 2007-10-23. с. 4. Процитовано 2009-05-03. 
  7. Press release announcing JavaScript, «Netscape and Sun announce Javascript», PR Newswire, December 4, 1995
  8. TechVision: Innovators of the Net: Brendan Eich and JavaScript. Web.archive.org. Архів оригіналу за 2008-02-08. 
  9. Brent Noorda's Answers on ECMA. Quora. Процитовано 2014-04-13. 
  10. ECMAScript 3rd Edition specification (PDF). Процитовано 2013-05-26. 
  11. Documentation. ECMAScript. Процитовано 2014-04-13. 
  12. ES6, ES8, ES2017: что такое ECMAScript и чем это отличается от JavaScript. Tproger (ru-RU). 2017-09-07. Процитовано 2017-10-08. 
  13. 15 самых популярных языков программирования по версии GitHub (ru-RU). Процитовано 2017-10-08. 
  14. JavaScript: The World's Most Misunderstood Programming Language. Crockford.com. Процитовано 2009-05-19. 

Див. також[ред.ред. код]

Посилання[ред.ред. код]