Парадигма | событийно-ориентированный, функциональный, императивный |
---|---|
Первоначально разработан | Бренданом Эйхом, а также другими ключевыми участниками ECMAScript спецификация |
Впервые появилась | 4 декабря 1995 г.; 24 года назад (1995-12-04) |
Стабильный выпуск | ECMAScript 2020 / июнь 2020; 4 месяца назад (2020-06) |
Предварительный выпуск | ECMAScript 2021 |
Дисциплина ввода | Динамический, duck |
Расширения имен файлов |
|
Основные реализации | |
V8, JavaScriptCore, SpiderMonkey, Chakra | |
Под текущей | |
AWK, C, HyperTalk, Java, Lua, Perl, Python, Scheme, Self | |
под данной | |
ActionScript, AtScript, CoffeeScript, Dart, JScript.NET, LiveScript, Цель- J, Opa, QML, Raku, TypeScript | |
|
JavaScript ( ), часто сокращенно JS, представляет собой язык программирования, соответствующий спецификации ECMAScript. JavaScript - это высокоуровневый, часто оперативно компилированный и мультипарадигмальный. Он имеет синтаксис фигурных скобок, динамическую типизацию, на основе прототипов объектно-ориентированный и первого функции класса.
Наряду с HTML и CSS, JavaScript является одной из основных технологий World Wide Web. JavaScript поддерживает интерактивные веб-страницы и является неотъемлемой частью веб-приложений. Подавляющее большинство веб-сайтов используют его для клиентского поведения, и все основные веб-браузеры имеют специальный JavaScript-движок для выполнения.
В качестве многопарадигмального языка JavaScript поддерживает управляемые событиями, функциональные и императивные стили программирования. Он имеет интерфейсы прикладного программирования (API) для работы с текстом, датами, регулярными выражениями, стандартными структурами данных и объектной моделью документа ( ДОМ). Однако сам язык не включает никаких ввода / вывода (I / O), таких как сеть, хранилище или графика. средств, поскольку среда хоста (обычно веб-браузер) предоставляет эти API.
Механизмы JavaScript изначально использовались только в веб-браузерах, но теперь они встроены в некоторые серверы, обычно через Node.js. Они также встроены в различные приложения, созданные с помощью фреймворков, таких как Electron и Cordova.
. Хотя между JavaScript и Java есть сходство, включая имя языка, синтаксис и соответствующие стандартные библиотеки, эти два языка отличаются друг от друга и отличаются по дизайну.
Веб-браузер Mosaic был выпущен в 1993 году. браузер с графическим пользовательским интерфейсом, доступным для нетехнических специалистов, он играет заметную роль в быстром росте зарождающейся World Wide Web. Затем ведущие разработчики Mosaic основали корпорацию Netscape, которая в 1994 году выпустила более совершенный браузер Netscape Navigator. Навигатор быстро стал самым популярным браузером.
В эти годы становления Интернета веб-страницы могли быть только статичными, не имея возможности динамического поведения после загрузки страницы в браузер. В быстро растущей среде веб-разработки было желание снять ограничение, поэтому в 1995 году Netscape решила добавить в Navigator сценариев . Для этого они выбрали два пути: сотрудничество с Sun Microsystems для внедрения Java языка программирования, а также с привлечением Брендана Эйха для внедрения Схема язык.
Руководство Netscape вскоре решило, что лучший вариант для Эйха - разрабатывает новый язык с синтаксисом, похожим на Java и меньше похожим на Схему или другие приспособительные сценарии. Хотя новый язык и его реализация интерпретатора были официально названы LiveScript при первой поставке в составе версии Navigator в сентябре 1995 года, через три месяца название было изменено на JavaScript.
Выбор из названия JavaScript вызывало путаницу, иногда создавая впечатление, что это побочный продукт Java. Netscape охарактеризовала это как маркетинговую уловку, направленную на создание собственного нового языка.
Microsoft дебютировало Internet Explorer в 1995 году, что привело к войне браузеров с Netscape. Что касается JavaScript, Microsoft перепроектировала интерпретатор Navigator для создания своего собственного, под названием JScript.
JScript был впервые выпущен в 1996 году вместе с корпоративной поддержкой CSS и расширения до HTML. Каждая из этих реализаций заметно отличалась от своих аналогов в Navigator. «Лучше всего просматривается в Netscape» и «лучше всего просматривается в Internet Explorer» за несколько лет.
В ноябре 1996 года Netscape представила JavaScript в ECMA International в качестве отправной точки для стандартной спецификации, которая может соответствовать всем поставщикам браузеров. Это привело к официальному выпуску первой спецификации языка ECMAScript в июне 1997 года.
Процесс стандартизации продолжался несколько лет с выпуском ECMAScript 2 в июне 1998 года и ECMAScript 3 в Декабрь 1999 г. Работа над ECMAScript 4 началась в 2000 г.
Тем временем Microsoft завоевывала все более доминирующее положение на рынке браузеров. К началу 2000-х годов доля рынка Internet Explorer достигла 95%. Это означало, что JScript стал де-факто стандартом для клиентских сценариев в Интернете.
Microsoft изначально участвовала в процессе стандартизации и реализовала некоторые предложения на своем языке JScript, но в конце концов прекратила сотрудничество в области ECMA. Таким образом, ECMAScript 4 был законсервирован.
В период доминирования Internet Explorer в начале 2000-х, клиентские сценарии находились в застое. Ситуация начала меняться в 2004 году, когда преемник Netscape, Mozilla, выпустил браузер Firefox. Firefox был хорошо задействован, заняв значительную долю рынка у Internet Explorer.
В 2005 году Mozilla присоединилась к ECMA International, и началась работа над стандартом ECMAScript для XML (E4X). Это привело к тому, что Mozilla работала совместно с Macromedia (позже использовала Adobe Systems ), реализовавшую E4X на своем языке ActionScript 3, основанном на черновике ECMAScript 4. Целью стала стандартизация ActionScript 3 как нового ECMAScript 4. С этой целью Adobe Systems запустила функцию Tamarin как проект с открытым исходным кодом. Однако Tamarin и ActionScript 3 слишком отличались от дополнительных возможностей клиента, и без сотрудничества с Microsoft ECMAScript 4, так и не был реализован.
Между тем, очень важные события происходили в сообществах разработчиков ПО с открытым исходным кодом, не связанным с работой ECMA. В 2005 году Джесси Джеймс Гаррет выпустил официальный документ, в котором ввел термин Ajax и описал набор технологий, в основе которых лежит JavaScript, для создания веб-приложений., где данные могут быть загружены в фоновом режиме, что позволяет избежать перезагрузки полной страницы. Это вызвало период возрождения JavaScript, во главе которого стояли библиотеки с открытым исходным кодом и сообщества, которые сформировались вокруг них. Было создано много новых библиотек, в том числе jQuery, Prototype, Dojo Toolkit и MooTools.
Google представил свой Хром. в 2008 году с движком JavaScript V8, который был быстрее своих конкурентов. Ключевым нововведением была своевременная компиляция (JIT), поэтому другим поставщикам браузеров потребовалось пересмотреть свои механизмы для JIT.
В июле 2008 года эти разрозненные стороны собрались на конференцию в Осло. Это привело к окончательному соглашению в начале 2009 г. объединить соответствующую работу и продвинуть язык вперед. Результатом стандарт ECMAScript 5, стал выпущенный в декабре 2009 года.
Амбициозная работа над языком продолжалась в течение нескольких лет, кульминацией которой стало создание обширного набора дополнительных и уточнений, формализованных с помощью публикации ECMAScript 6 в 2015 году.
С 2016 по 2019 год новая версия стандарта ECMAScript публиковалась каждый год, но объем изменений был намного меньше, чем в 5-м или 6-м изданиях.. Таким образом, JavaScript теперь можно считать зрелым языком, который в степени прижился.
Использование экосистемы JavaScript включает множество библиотек и фреймворков, устоявшиеся практики программирования и более широкое JavaScript вне веб-браузеров. Кроме того, с появлением одностраничных приложений и других веб-сайтов с большим количеством JavaScript, было создано несколько транспиляторов, чтобы помочь процессу разработки.
«JavaScript» является товарным знаком компании Oracle Corporation в США. Он используется по лицензии для технологий, изобретенной и внедренной Netscape Communications и другими сторонами.
JavaScript является доминирующим клиентским языками Интернет, причем 95% веб-сайтов используют его для цели. Сценарии встраиваются в документы HTML или включаются в них и взаимодействуют с DOM. Все основные веб-браузеры имеют встроенный механизм JavaScript, который использует код на устройстве пользователя.
Большинство веб-сайтов используют стороннюю библиотеку JavaScript или фреймворк веб-приложений как часть своих сценариев на стороне клиента.
jQuery - самая популярная библиотека, которую используют более 70% веб-сайтов.
Фреймворк Angular был создан Google для своих веб-сервисов; теперь он с внешним исходным кодом и используется другими веб-сайтами. Аналогичным образом Facebook создал функцию React для своего веб-сайта, а затем выпустил ее как открытый исходный код; другие сайты, в том числе Twitter, теперь используйте его. Используются и другие платформы с открытым исходным кодом, такие как Backbone.js и Vue.js.
Напротив, термин «Vanilla JS» был придуман для веб-сайтов, не использующих какие-либо библиотеки или фреймворки., вместо этого полностью полагаясь на стандартные функции JavaScript.
Использование JavaScript вышло за пределы его корней веб-. Механизмы JavaScript теперь встроены во множество других программных систем, как для серверных развертываний веб-сайтов, так и для небраузерных приложений.
Первоначальные попытки продвижения серверной части Использование JavaScript было Netscape Enterprise Server и Microsoft Internet Information Services, но они были небольшими нишами. Использование на стороне сервера в конечном итоге начало в конце 2000-х, созданное с помощью Node.js и других подходов.
Electron, Cordova и другие <Были использованы 53>программные фреймворки для создания многих приложений с поведением, реализованным на JavaScript. Другие небраузерные приложения включают поддержку Adobe Acrobat для сценариев PDF документов и GNOME Shell расширений, написанных на JavaScript.
JavaScript недавно начал работать в некоторых встроенных системах, обычно за счет использования Node.js.
Следующие функции являются общими для всех соответствующих реализаций ECMAScript, если явно не указаны параметры.
JavaScript поддерживает большую часть синтаксиса структурированного программирования из C (например, if
операторы, пока
циклы, переключатель
операторы, пока
циклы и т. Д.). Одно частичное исключение - область действия : изначально в JavaScript была только область действия с var
. В ECMAScript 2015 добавлены ключевые слова let
const
для определения области видимости блока, что означает, что JavaScript имеет и функцию, и область видимости блока. Как и C, JavaScript делает различие между выражениями и операторами. Одним из синтаксических отличий от C является автоматическая вставка точки с запятой, которая позволяет опускать точки с запятой, которые обычно завершают инструкции.
JavaScript слабо типизирован, что означает, что типы неявно приводятся в зависимости от используемой операции.
+
преобразует оба операнда в строке, если оба операнда не являются числами. Это связано с тем, что оператор сложения дублирует оператор конкатенации-
всегда приводит оба операнда к компьютеру+
, -
) всегда приводят операнд к числаЗначения приводятся к строкам, как показано ниже:
,
)[object Object]
, где Object
- имя конструктора объектаЗначения преобразуются в числа путем преобразования в строки, а затем преобразования строк в числа. Эти процессы можно изменить, определить функции toString
и valueOf
в прототипе для приведения строк и чисел соответственно.
JavaScript подвергся критике за то, как он реализует эти преобразования, поскольку правил может быть ошибочно принята за несогласованность напряженн ость. Например, при добавлении числа к строке число будет преобразовано в строку перед выполнением конкатенации, но при вычитании числа из строки преобразуется в число перед выполнением вычитания.
левый операнд | оператор | правый операнд | результат |
---|---|---|---|
(пустой массив) | + | ( пустой массив) | "" (пустая строка) |
(пустой массив) | + | {} (пустой объект) | «[объект-объект]» (строка) |
false (лог) | + | (пустой массив) | «false» (строка) |
«123» (строка) | + | 1 (число) | «1231» (строка) |
"123" (строка) | - | 1 (число) | 122 (число) |
Часто также регистрируется {} +
, в результате получается 0
(число). Это вводит в заблуждение: {}
интерпретируется как пустой кодовый блок вместо пустого объекта, и пустой массив преобразуется в число с помощью оставшегося унарного оператора +
. Если вы заключите выражение в круглые скобки ({} +)
, фигурные скобки интерпретируются как пустой объект, и результатом выражения будет "[объект Object]"
, как ожидалось.
eval
, которая может выполнять функции в операторы, предоставляемые виде строк во время выполнения.Прототипное наследование в JavaScript описывается Дугласом Крокфордом как:
Вы создаете объекты-прототипы, а… создайте новые экземпляры. Объекты изменяемы в JavaScript, поэтому мы можем использовать новые экземпляры, давая им новые поля и. Затем они могут выступать в качестве прототипов даже для более новых объектов. Нам не нужны классы, чтобы создавать множество похожих объектов… Объекты наследуются от объектов. Что может быть более объектно-ориентированным, чем это?
В JavaScript объект представляет собой ассоциативный массив , дополненный прототипом (см. Ниже); каждый строковый ключ предоставляет имя для объекта свойство, и есть два синтаксических способа указать такое имя: точечная нотация (obj.x = 10
) и скобка (obj ['x'] = 10
). Свойство может быть добавлено, восстановлено или удалено во время выполнения. Большинство свойств объекта (и любое свойство, принадлежащее цепочке наследования прототипа объекта) можно перечислить с помощью цикла for... in
.
JavaScript имеет небольшое количество встроенных объектов, включая Function
и Date
.
Object
). ECMAScript 5 предлагает метод Object.create
, позволяющий явное создание экземпляра без автоматического наследования от прототипа Object
(более старые среды могут присвоить прототипу значение null
). Свойство prototype
конструктора определяет объект, используемый для внутреннего прототипа нового объекта. Новые методы могут быть добавлены путем изменения прототипа функции, используемой в качестве конструктора. Встроенные конструкторы JavaScript, такие как Array
или Object
, также имеют прототипы, которые можно изменять. Хотя можно изменить прототип Object
, это обычно считается плохой практикой, потому что большинство объектов в JavaScript наследуют методы и свойства от прототипа Object
, и они могут не ожидать прототипа. должны быть изменены.A функция является первоклассной ; функция считается объектом. Таким образом, функция может иметь свойства и методы, такие как .call ()
и .bind ()
. Вложенная функция - это функция, определенная внутри другой функции. Он создается каждый раз при вызове внешней функции. Кроме того, каждая вложенная функция образует лексическое замыкание : лексическая область внешней функции (включая любую константу, локальную переменную или значение аргумента) становится частью внутреннего состояния каждой внутренний объект функции, даже после завершения выполнения внешней функции. JavaScript также поддерживает анонимные функции.
JavaScript поддерживает неявное и явное делегирование.
this
внутри его function
body. Затем роль должна быть явно делегирована через call
или apply
к объектам, которые должны иметь дополнительное поведение, которое не передается через цепочку прототипов.Транспилеры
JavaScript - доминирующий клиентский язык в Интернете, многие веб-сайты являются скриптовыми. тяжелый. Таким образом, были созданы транспилеры для преобразования кода, написанного на других языках, что может помочь процессу разработки.
Ссылки
Дополнительная литература
- Eloquent JavaScript; 3-е изд; Марин Хавербеке; Пресс без крахмала; 472 страницы; 2018; ISBN 978-1593279509.(загрузить)
- Принципы объектно-ориентированного JavaScript; 1-е изд; Николас Закас; Пресс без крахмала; 120 страниц; 2014; ISBN 978-1593275402.
Внешние ссылки
Слушайте эту статью Этот аудиофайл был создан на основе редакции этой статьи от 20.08.2013, и не отражает правок. ()