JavaScript

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до: навігація, пошук
JavaScript
Unofficial JavaScript logo 2.svg
Парадигма: імперативна, елементи функціональної, об'єктно-орієнтована (прототип-орієнтована)
Дата появи: 1995
Творці: Брендан Айк
Розробник: Netscape Communications Corporation, Mozilla Foundation
Останній реліз: 1.8.5[1] (22 березня 2011)
Система типізації: динамічна, качина
Основні реалізації: KJS, Rhino, SpiderMonkey, V8, Carakan, Chakra (Microsoft)
Під впливом від: Scheme, Self, Java, C, Python
Вплинула на: ActionScript, CoffeeScript, Dart, JScript .NET, Objective-J, QML, TypeScript, Node.js, LiveScript
JavaScript
Javascript icon.svg
Розширення файлу: .js
MIME тип: application/javascript
text/javascript (застаріла)[2]
Uniform Type Identifier: com.netscape.javascript-source[3]
Тип формату: текстовий файл

JavaScript (JS) — динамічна, об'єктно-орієнтованa[4] мова програмування. Реалізація стандарту ECMAScript. Найчастіше використовується як частина браузера, що надає можливість коду на стороні клієнта (такому, що виконується на пристрої кінцевого користувача) взаємодіяти з користувачем, керувати браузером, асинхронно обмінюватися даними з сервером, змінювати структуру та зовнішній вигляд веб-сторінки. Мова JavaScript також використовується для програмування на стороні серверу (подібно до таких мов програмування, як Java і C#), розробки ігор, стаціонарних та мобільних додатків, сценаріїв в прикладному ПЗ (наприклад, в програмах зі складу Adobe Creative Suite), всередині PDF-документів тощо.

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

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

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

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

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

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

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

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

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

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

На сьогодні, актуальна версія стандарту — 5.1. Вона була випущена в червні 2011 року.[11]

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

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

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

JavaScript має низку властивостей об'єктно-орієнтованої мови, але завдяки концепції прототипів підтримка об'єктів в ній відрізняється від традиційних мов ООП. Крім того, JavaScript має ряд властивостей, притаманних функціональним мовам, — функції як об'єкти першого класу, об'єкти як списки, каррінг (currying), анонімні функції, замикання (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 і реалізації Об'єктної Моделі Документа, треба мати в руках зневаджувач для кожного браузера, якщо веб-застосування орієнтовано на нього.

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

Internet Explorer має три звеваджувача для себе: Microsoft Visual Studio є найпотужнішим з цих трьох, слідом йде Microsoft Script Editor (компонента Microsoft Office[13]), і нарешті існує безплатний Microsoft Script Debugger з базовими функціями. Веб-застосування для Firefox допоможе привести до розуму додаток Firebug (зручно вбудований безпосередньо в браузер), або давніший відладчик Venkman, котрий також працює з браузером Mozilla. Drosera — це зневаджувач з WebKit engine[14], що супроводжує Apple Safari.

Також існують кілька інструментів, як вільних, наприклад JSLint[15], інструмент перевірки якості коду, що сканує JavaScript програму, шукаючи проблеми коду, так і комерційних продуктів типу інструменту з назвою JavaScript Debugger.

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

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

Версії[ред.ред. код]

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; також
пізні версії Netscape і Mozilla)
5.5 (IE 5.5, липень 2000) Редакція 3 (грудень 1999)
5.6 (IE 6.0, жовтень 2001)
1.6 (Gecko 1.8, Firefox 1.5, листопад 2005) Редакція 3 з деякими сумісними поліпшеннями: E4X, доповнення до Array (наприклад, Array.prototype.forEach), спрощення для Array і String [1](англ.)
Редакція 3, з додаванням всіх поліпшень з JavaScript 1.6, генераторів і облікових виразів (list comprehensions, [a*a for (а in iter)]) з Python, блокових областей з використанням let і деструктуруючих присвоєнь (var [а,b]=[1,2]) [2](англ.)
JScript .NET (ASP.NET; нема версії IE) (Вважається, що JScript .NET розроблений за участі інших членів ECMA)
2.0 (стара пропозиція Netscape) Редакція 4 (у розробці)

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

Реальний звіт про використання JavaScript в браузерах свідчить, що

  • біля 90% користувачів мають встановленим JavaScript версії 1.3,
  • близько 4% — версію 1.0,
  • близько 3,5% — версію 1.5,
  • близько 2,5% — версію 1.6,

решта версій зустрічається в долях відсотка (джерело — spylog.ru[16] на січень 2008).

Виноски[ред.ред. код]

  1. «New in JavaScript 1.8.5 | Mozilla Developer Network». Developer.mozilla.org. 2012-11-18. Процитовано 2013-05-26. 
  2. «RFC 4329». Apps.ietf.org. Процитовано 2013-05-26. 
  3. «System-Declared Uniform Type Identifiers». Mac OS X Reference Library. Apple Inc. Процитовано 2010-03-05. 
  4. «ECMAScript Language Specification». 
  5. «ECMAScript Language Overview» (PDF). 2007-10-23. с. 4. Процитовано 2009-05-03. 
  6. Press release announcing JavaScript, «Netscape and Sun announce Javascript», PR Newswire, December 4, 1995
  7. «TechVision: Innovators of the Net: Brendan Eich and JavaScript». Web.archive.org. Архів оригіналу за 2008-02-08. 
  8. «Brent Noorda's Answers on ECMA». Quora. Процитовано 2014-04-13. 
  9. «ECMAScript 3rd Edition specification» (PDF). Процитовано 2013-05-26. 
  10. «Documentation». ECMAScript. Процитовано 2014-04-13. 
  11. «Standard ECMA-262» (PDF). Процитовано 2013-05-26. 
  12. «JavaScript: The World's Most Misunderstood Programming Language». Crockford.com. Процитовано 2009-05-19. 
  13. JScript development in Microsoft Office 11 (MS InfoPath 2003)
  14. Introducing Drosera — Surfin' Safari
  15. JSLint help page
  16. spylog.ru

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

Ресурси інтернет[ред.ред. код]