JavaScript
![]() |
|
Парадигма: | імперативна, елементи функціональної, об'єктно-орієнтована (прототип-орієнтована) |
---|---|
Дата появи: | 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 |
![]() |
|
Розширення файлу: | .js |
---|---|
MIME тип: |
|
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).
Виноски[ред. • ред. код]
- ↑ «New in JavaScript 1.8.5 | Mozilla Developer Network». Developer.mozilla.org. 2012-11-18. Процитовано 2013-05-26.
- ↑ «RFC 4329». Apps.ietf.org. Процитовано 2013-05-26.
- ↑ «System-Declared Uniform Type Identifiers». Mac OS X Reference Library. Apple Inc. Процитовано 2010-03-05.
- ↑ «ECMAScript Language Specification».
- ↑ «ECMAScript Language Overview» (PDF). 2007-10-23. с. 4. Процитовано 2009-05-03.
- ↑ Press release announcing JavaScript, «Netscape and Sun announce Javascript», PR Newswire, December 4, 1995
- ↑ «TechVision: Innovators of the Net: Brendan Eich and JavaScript». Web.archive.org. Архів оригіналу за 2008-02-08.
- ↑ «Brent Noorda's Answers on ECMA». Quora. Процитовано 2014-04-13.
- ↑ «ECMAScript 3rd Edition specification» (PDF). Процитовано 2013-05-26.
- ↑ «Documentation». ECMAScript. Процитовано 2014-04-13.
- ↑ «Standard ECMA-262» (PDF). Процитовано 2013-05-26.
- ↑ «JavaScript: The World's Most Misunderstood Programming Language». Crockford.com. Процитовано 2009-05-19.
- ↑ JScript development in Microsoft Office 11 (MS InfoPath 2003)
- ↑ Introducing Drosera — Surfin' Safari
- ↑ JSLint help page
- ↑ spylog.ru
Див. також[ред. • ред. код]
- ActionScript — реалізація від Adobe для Flash.
- Rhino — реалізація на Java.
- JScript — реалізація в Інтернет Експлорер від Microsoft.
- DOM — об'єктна модель документа.
- Firebug
- AJAX
- JSON
- JSAN
Ресурси інтернет[ред. • ред. код]
- ECMA-262, ECMAScript Language Specification.
- Стандарт ECMA-262 (англ.) (третє видання; формат PDF)
- JavaScript домашня сторінка, JavaScript довідник на mozilla.org.
- Довідник з JavaScript версії 1.5: 1.5
- Зміни в нових версіях JavaScript: 1.7, 1.6
- JScript та JScript .NET довідники на сайті MSDN Library
- IBM Developerworks, JavaScript's language features.
- Довідник с прикладами(англ.)
- Зібрання посилань за темою(англ.)
- Підтримка JavaScript різними браузерами(англ.)
- Довідник з JavaScript(рос.)
- JavaScript підручник. — з прикладами і вправами.(рос.)
- Ядро JavaScript. Справочник.(рос.)
- Автор мови Брендан Ейх розповідає про історію мови(англ.)
- www.nakedjavascript.com(англ.)
- Mozilla JavaScript shells (англ.)
- Mozilla (Rhino engine) JavaScript shell (англ.)
- Seed(англ.), Server-side JavaScript(comparison)(англ.) — особливо цікавими виглядают пункти: Node.js, GLUEscript, Ejscript — що, також, можуть бути використані для забезпечення «утилітарного» JavaScript програмування під юнікс-подібними операційними системами
|