Movatterモバイル変換


[0]ホーム

URL:


Перейти до вмісту
Вікіпедія
Пошук

JavaScript

Очікує на перевірку
Матеріал з Вікіпедії — вільної енциклопедії.

Статус версії сторінки

На цій сторінці показано неперевірені зміни

JavaScript
Парадигмаімперативна, елементифункційна,об'єктно-орієнтована (прототип-орієнтована)
Дата появи1995
ТворціБрендан Айк
РозробникNetscape Communications Corporation,Mozilla Foundation
Останній релізECMAScript 2020[1] (червень 2020)
Тестова версія(27 липня 2010)
Система типізаціїдинамічна,качина
Основні реалізаціїV8,SpiderMonkey,Rhino,KJS,Carakan,Chakra (Microsoft)
Під впливом відScheme,Self,Java,C,Python
Вплинула наActionScript,CoffeeScript,Dart,JScript .NET,Objective-J,QML,TypeScript,LiveScript
Звичайні розширення файлів.js[2] або.mjs[2] Редагувати інформацію у Вікіданих
Вебсайтecma-international.org/publications-and-standards/standards/ecma-262/ Редагувати інформацію у Вікіданих
Розширення:.js
MIME-тип:application/javascript
text/javascript (застаріла)[3]
Узагальнений ідентифікатор типу:com.netscape.javascript-source[4]
Тип формату:текстовий файл
Сайт:ecma-international.org/publications-and-standards/standards/ecma-262/(англ.) Редагувати інформацію у Вікіданих
Не плутати зJava.
Не плутати зJScript.

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

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

Застосування

[ред. |ред. код]

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

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

Історія

[ред. |ред. код]

Поява в Netscape

[ред. |ред. код]

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

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

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

Стандартизація

[ред. |ред. код]

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

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

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

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

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

Версія ES2018 вийшла у червні 2018 року[17], додала можливість здійснювати асинхронніітерації, оператор Spread (…) для роботи з об'єктами та масивами, декілька нових можливостей длярегулярних виразів, метод Promise.prototype.finally, який спрацьовує по отриманню Promise'ом статусу «виконаний».

Версія ES2019 вийшла у червні 2019 року[18], серед нововведень: новийтип даних Symbol, нові методи для роботи з рядками та масивами, перетворення об'єктів в масиви і навпаки за допомогою Entries.

Актуальною на даний момент є версія ES2020, що вийшла у червні 2020 року[19]. Вона додала до мови новий тип даних BigInt, оператор ?? для перевірки на null та undefined, можливість використання опціональних значень в об'єкті, динамічні імпорти, об'єкт globalThis, методи String.prototype.matchAll для пошуку у рядку за допомогою регулярних виразів та Promise.allSettled для спрацювання після виконання усіх Promise'ів.

Актуальний стан

[ред. |ред. код]

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

В 2023 році, у категорії найпопулярніших мов програмування серед IT-спеціалістів згідно рейтингуIEEE Spectrum, який охоплював 59 мов програмування, топ-5 виглядав так: Python, Java, C++, C, JavaScript[22].

Опис

[ред. |ред. код]

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

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

JavaScript містить декілька десятків вбудованих об'єктів[23], які поділяються на групи: фундаментальні (Object, Function, Boolean, Symbol), помилки (група об'єктів Error), числа та дати (Number, BigInt, Math Date), текстові (String, RegExp), індексовані (група об'єктів Array), ключові (Map, Set, WeakMap, WeakSet), для роботи з структурованими даними (ArrayBuffer, Atomics, DataView, JSON), абстрактні (Promise, Generator), рефлекційні (Reflect, Proxy), групи Intl та WebAssembly. Крім того, JavaScript містить набір вбудованих операцій, що керують логікою виконання програм. Синтаксис JavaScript в основному відповідає синтаксису мовиJava (тобто, зрештою, успадкований від C), але спрощений у порівнянні з ним, щоб зробити мову сценаріїв легкою для вивчення. Так, наприклад, декларація змінної не містить її типу, властивості також не мають типів, а декларація функції може знаходитися в тексті програми після неї.

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

Приклад оголошення і використання класу в #"ltr">

classMyClass{constructor(){this.myValue1=1;this.myValue2=2;}}constmc=newMyClass();mc.myValue1=mc.myValue2*2;

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

Використання в HTML

[ред. |ред. код]

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

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

<script>alert("Hello, World!");</script>

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

<scriptsrc="шлях/до/файлу/зі/скриптом.js"></script>

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

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

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

Асинхронні скрипти: defer/async

[ред. |ред. код]

Атрибутиasync іdefer використовуються для ввімкнення асинхронного порядку завантаження скриптів.

Атрибут async

[ред. |ред. код]

Підтримується всіма браузерами, крімIE9-. Скрипт виконується асинхронно. Тобто, елемент<scriptasyncsrc="..."> , виконується в момент його отримання браузером.

Атрибут defer

[ред. |ред. код]

Підтримується всіма браузерами, включно з найстаршими версіямиIE. Скрипт також виконується асинхронно, не змушує чекати сторінку, але є дві відмінності відasync.

Перша — браузер гарантує, що відносний порядок скриптів зdefer буде збережений.

Тобто, в такому коді (з async) першим працюватиме той скрипт, котрий швидше завантажиться.

<scriptsrc="1.js"async></script><scriptsrc="2.js"async></script>

А в такому коді (з defer) першим спрацює завжди1.js, а скрипт2.js, навіть якщо завантажився раніше, буде його чекати.

<scriptsrc="1.js"defer></script><scriptsrc="2.js"defer></script>

Тому атрибутdeferвикористовують в тих випадках, коли другий скрипт2.js залежить від першого1.js, наприклад — використовує щось, описане першим скриптом.

Друга відмінність — скрипт зdefer спрацює, коли весь HTML-документ буде оброблений браузером.

Наприклад, якщо документ досить великий…

<scriptsrc="async.js"async></script><scriptsrc="defer.js"defer></script>

…то скриптasync.js виконається, щойно завантажиться, можливо, до того, як весь документ готовий. Аdefer.js почекає готовності всього документа.

Це буває зручно, коли ми в скрипті хочемо працювати з документом, і повинні бути впевнені, що він цілком отриманий.

Типізація

[ред. |ред. код]

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

Відлагодження

[ред. |ред. код]

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

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

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

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

Див. також

[ред. |ред. код]

Примітки

[ред. |ред. код]
  1. Standard ECMA-262.www.ecma-international.org. Архіворигіналу за 18 вересня 2008. Процитовано 18 січня 2021.(англ.)
  2. абM. Miller, M. Borins, M. Bynens et al.Updates to ECMAScript Media TypesIETF, 2022. —doi:10.17487/RFC9239
  3. RFC 4329. tools.ietf.org. Архіворигіналу за 27 травня 2019. Процитовано 21 грудня 2015.
  4. System-Declared Uniform Type Identifiers.Mac OS X Reference Library. Apple Inc. Архіворигіналу за 25 грудня 2018. Процитовано 5 березня 2010.
  5. ECMAScript Language Specification(PDF). Архіворигіналу(PDF) за 12 квітня 2015. Процитовано 20 серпня 2014.
  6. Electron
  7. NW.js
  8. React Native
  9. Cordova
  10. ECMAScript Language Overview(PDF). 23 жовтня 2007. с. 4. Архіворигіналу(PDF) за 13 липня 2010. Процитовано 3 травня 2009.
  11. Press release announcing JavaScript, «Netscape and Sun announce Javascript», PR Newswire, December 4, 1995
  12. TechVision: Innovators of the Net: Brendan Eich and JavaScript. Web.archive.org. Архіворигіналу за 8 лютого 2008.
  13. Brent Noorda's Answers on ECMA. Quora. Процитовано 13 квітня 2014.
  14. ECMAScript 3rd Edition specification(PDF). Архіворигіналу(PDF) за 12 квітня 2015. Процитовано 26 травня 2013.
  15. Documentation. ECMAScript. Архіворигіналу за 26 квітня 2011. Процитовано 13 квітня 2014.
  16. абвES6, ES8, ES2017: что такое ECMAScript и чем это отличается от JavaScript.Tproger(рос.). 7 вересня 2017. Архіворигіналу за 8 жовтня 2017. Процитовано 8 жовтня 2017.
  17. Caballero, Carlos (28 січня 2020).JavaScript ES2018 Features With Examples.Medium(англ.). Архіворигіналу за 22 січня 2021. Процитовано 18 січня 2021.
  18. Caballero, Carlos (28 січня 2020).Twelve ES10 Features in Twelve Simple Examples.Medium(англ.). Архіворигіналу за 24 січня 2021. Процитовано 18 січня 2021.
  19. Caballero, Carlos (28 січня 2020).JavaScript ES2020 Features With Simple Examples.Medium(англ.). Архіворигіналу за 24 січня 2021. Процитовано 18 січня 2021.
  20. 15 самых популярных языков программирования по версии GitHub(рос.). Архіворигіналу за 8 жовтня 2017. Процитовано 8 жовтня 2017.
  21. #"nofollow" href="http://www.crockford.com/javascript/javascript.html">оригіналу за 7 грудня 2020. Процитовано 19 травня 2009.
  22. IEEE Spectrum опублікувала рейтинг найпопулярніших мов програмування 2023 року. // Автор: Артем Житкевич. 30.08.2023
  23. Standard built-in objects - JavaScript - MDN.developer.mozilla.org. Архіворигіналу за 19 січня 2021. Процитовано 18 січня 2021.

Посилання

[ред. |ред. код]
Вікісховище має мультимедійні дані за темою:JavaScript
Сабреддіт (англ.)
Література та бібліографія
Тематичні сайти
Словники та енциклопедії
Довідкові видання
KBpedia ·Fandom (англ.) ·Fandom (англ.) ·Namuwiki
Нормативний контроль
Аналіз коду
Компілятори
Концепти
Дебагери
Генератори документації
Редактори коду (порівняння)
Фреймворки
Пов'язанітехнології
Менеджери пакетів
Серверний JS
Тестування
Персоналії
Рівень
Низькорівневі
Високорівневі
Загального
призначення
Серверні
Запитів до баз
даних[суперечливо 1]
Розмітки тавекторної
графіки
[суперечливо 1]
Синхронні
Символьних та
чисельних обчислень
Квантових обчислень
Логічні
Академічні
Езотеричні
  1. абНемає загальноприйнятого рішення, чи вважати усі ці мови саме мовами програмування
Можливості · стандарти · протоколи
Можливості
Вебстандарти
Протоколи
Діючі
На основіBlink
На основіGecko
На основіWebKit
Інші
Розробку припинено
На основіGecko
На основіMSHTML
На основіWebKit
Інші
PROGЦе незавершена стаття пропрограмування.
Ви можетедопомогти проєкту,виправивши або дописавши її.
Отримано зhttps://uk.wikipedia.org/w/index.php?title=JavaScript&oldid=45212233
Категорії:
Приховані категорії:

[8]ページ先頭

©2009-2025 Movatter.jp