JavaScript (не путать с Java) - это высокоуровневый, динамический, мультипарадигмальный, объектно-ориентированный, основанный на прототипах, слабо типизированный и интерпретируемый язык, используемый как для сценариев на стороне клиента, так и на стороне сервера. Его основное использование в рендеринге и манипулировании веб-страницами. Используйте этот тег для вопросов, касающихся ECMAScript и его различных диалектов/реализаций (за исключением ActionScript и Google-Apps-Script).

JavaScript (диалект ECMAScript) - это высокоуровневый, динамический, мультипарадигмальный, объектно-ориентированный, основанный на прототипах, слабо типизированный и интерпретируемый язык, традиционно используемый для сценариев на стороне клиента в веб-браузерах. JavaScript также может быть запущен вне браузера с использованием такой инфраструктуры, как Node.js, Nashorn, Wakanda или Google Apps Script. Несмотря на название, оно не связано с языком программирования Java и имеет только внешнее сходство.

Если тег для фреймворка или библиотеки также не включен, для вопросов с тегом [tag: JavaScript] ожидается чистый ответ JavaScript.

JavaScript работает практически во всех операционных системах, а движок включен в основные веб-браузеры. Разработанный в 1995 году Бренданом Айхом в Netscape Communications, он изначально назывался LiveScript, но был переименован в JavaScript из-за дружеских отношений Netscape с Sun Microsystems (создатели Java) в то время.

Также доступны автономные движки или интерпретаторы JavaScript, в том числе:

  • Mozilla Spidermonkey, первый в истории движок JavaScript, используемый в настоящее время в Mozilla Firefox.
  • Google JavaScript движок Chrome V8, используемый в Google Chrome и Chromium.
  • Google Apps Script, облачный/серверный интерпретатор, обеспечивающий программный "макроподобный" контроль над службами и документами Служб Google.
  • Node.js, созданный поверх V8, платформы, которая позволяет писать на стороне сервера приложения на JavaScript.
  • В состав Windows входит JScript, вариант JavaScript в Windows Script Host.
  • Chakra, форк JScript, разработан Microsoft и используется в Edge.
  • Mozilla также предлагает Rhino, реализацию JavaScript, встроенную в Java, которая обычно встроена в приложения Java для предоставления сценариев конечным пользователям.
  • WebKit (кроме проекта Chromium) реализует движок JavaScriptCore.
  • ActionScript (изначально производный от HyperTalk) теперь является диалектом ECMAScript и использует множество API-интерфейсов ECMAScript.
  • Duktape Embeddable, переносимый движок ECMAScript на C с небольшим объемом памяти.
  • Wakanda, инфраструктура, IDE и сервер, основанный на V8, поддерживающий серверный JavaScript
  • Meteor: приложение Meteor представляет собой смесь клиентского JavaScript, который выполняется внутри веб-браузера или мобильного приложения PhoneGap, серверного JavaScript, который работает на сервере Meteor внутри контейнера Node.js. (согласно документации MeteorJS)
  • Nashorn, движок JavaScript, разработанный на языке программирования Java на основе машины Да Винчи (JSR 292)

Сеть разработчиков Mozilla содержит высококачественную документацию по JavaScript.

JavaScript обычно используется для управления объектной моделью документа (DOM) и каскадными таблицами стилей (CSS) в браузере. Это позволяет создавать сценарии пользовательского интерфейса, анимацию, автоматизацию, проверку на стороне клиента и многое другое.

С недавним появлением таких платформ, как Node.js, JavaScript теперь можно использовать для написания серверных приложений. Кроме того, он также используется в средах, не связанных с Интернетом, таких как документы PDF, браузеры для конкретных сайтов, виджеты на рабочем столе и т.д.

Номенклатура

Хотя он был разработан под названием Mocha, этот язык официально назывался LiveScript, когда он впервые был выпущен в бета-версиях Netscape Navigator 2.0 в сентябре 1995 года, но он был переименован в JavaScript при развертывании в версии браузера Netscape. 2.0B3.

Изменение названия с LiveScript на JavaScript примерно совпало с добавлением Netscape поддержки технологии Java в его веб-браузер Netscape Navigator. Окончательный выбор имени вызвал путаницу, создавая впечатление, что этот язык был побочным продуктом языка программирования Java, и Netscape выбрал маркетинговый ход, чтобы дать JavaScript кэш того, что было тогда горячо, ново язык веб-программирования.

Люди часто используют термин JavaScript неформально. Язык и термин произошли от Netscape. ECMAScript, JavaScript и JScript - это термины, которые легко спутать.

ECMAScript был разработан как стандартизация Netscape JavaScript и независимой разработки Microsoft JScript. Каноническим справочником является спецификация языка ECMAScript® 2015. Хотя JavaScript и JScript стремятся быть совместимыми с ECMAScript, они также предоставляют дополнительные функции (и другие отклонения), не описанные в спецификациях ECMA. Другие реализации ECMAScript также существуют.

Различия сегодня для тех, кто использует JavaScript, незначительны; люди обычно не различают варианты JavaScript и JScript от ECMAScript.

Версии ECMAScript

Большинство современных браузеров реализуют JavaScript на основе спецификации ECMAScript 6, хотя некоторые не в состоянии реализовать некоторые функции ES6. Однако в старых браузерах, таких как Internet Explorer 8, реализована спецификация ECMAScript 3, в которой, среди прочего, отсутствуют функции, такие как Function.prototype.bind и даже JSON.parse. Чтобы узнать о текущей поддержке браузером функций ES6, см. https://caniuse.com/#search=es6.

Текущая версия ECMAScript - это ECMAScript 9, известный как ECMAScript 2018, который был завершен в июне 2018 года.


Задавая вопрос JavaScript, вы должны:

  1. Отладьте код JavaScript (см. Creativebloq, MDN, Google и MSDN).
  2. Изолируйте проблемный код и воспроизведите его в фрагменте кода Qaru или во внешней онлайн-среде, такой как JSFiddle, JS Bin или PasteBin ( не забудьте также включить код в сам вопрос).
  3. Если используется библиотека или инфраструктура, пометьте вопрос соответствующими тегами: для jQuery, для прототипа, для MooTools и т.д. Однако, если инфраструктура не используется или не нужна, не включайте эти теги.
  4. Если проблема на стороне клиента, укажите, в каком браузере возникли проблемы с кодом, и какие сообщения об ошибках, если таковые имеются, были выданы браузером. Используйте Инструменты разработчика для вашего браузера (см. "Полезные инструменты" ниже), чтобы увидеть эти сообщения. Если вопрос относится к конкретному браузеру, используйте теги , , , , , , и т.д.
  5. Помечайте вопрос только как или , если вы спрашиваете о проблеме, касающейся комбинации одного из них с JavaScript и на которую можно ответить только с информацией, конкретно касающейся какой-либо из этих тем.

Изучение JavaScript

безопасностиJavaScript и DOM предоставляют злоумышленникам возможность создавать сценарии для запуска на клиентском компьютере через Интернет. Авторы браузера содержат этот риск, используя два ограничения. Во-первых, сценарии выполняются в песочнице, в которой они могут выполнять только веб-действия, а не задачи общего назначения, такие как создание файлов. Во-вторых, сценарии ограничены одной и той же политикой происхождения: сценарии с одного веб-сайта не имеют доступа к такой информации, как имена пользователей, пароли или файлы cookie, отправленные на другой сайт. Большинство ошибок безопасности, связанных с JavaScript, являются нарушениями той же политики происхождения или песочницы.

Политика безопасности содержимого - это основной метод обеспечения того, чтобы на веб-странице выполнялся только доверенный код.

XSS - это частая попытка украсть данные или нанести вред веб-сайту с помощью JavaScript.

Полезные инструменты

Интерактивное изучение JavaScript

  • Codecademy | JavaScript. Изучите основы JavaScript и динамического программирования.
  • Udacity | Языки программирования. Ключевые понятия включают определение и обработку допустимых строк, предложений и структур программы.
  • Школа кода. Изучите основы JavaScript и динамического программирования.
  • Ханская академия: лучше всего узнать об анимации.
  • Codewars: изучать шаблоны и обучаться тестам, опубликованным участниками сообщества

Мудрость от Кару

Полезные ссылки

Бесплатные книги по программированию JavaScript

Видео


Пример кода JavaScript

Этот скрипт отображает "Hello World" на вашем экране.

window.onload = function() {
   alert('Hello World!');
};

Demo!


Часто задаваемые вопросы

Найдите ответы на некоторые из наиболее часто задаваемых вопросов о JavaScript и связанных технологиях ниже.

Q: У меня есть эта структура JSON, как я могу получить доступ к свойству x.y.z?
A: Какя могу получить доступ и обработать вложенные объекты, массивы или JSON?

Q: Я добавляю события в цикл for, но все обработчики делают одно и то же, почему?
A: ЗакрытиеJavaScript внутри циклов - простой практический пример

В: Я хочу сравнить что-либо с несколькими значениями, есть ли простой способ сделать это?
A: Краткийспособ сравнения с несколькими значениями

Q: Как настроить правильное наследование?
A: Объекты не наследуют прототипированные функции

В: Как работают закрытия JavaScript?
A: Как работают закрытия JavaScript?

В: Почему setTimeout() внутри цикла for всегда использует последнее значение?
A: setTimeout в цикле for не печатает последовательные значения

Q: Как вернуть ответ на вызов AJAX из функции?
A: Каквернуть ответ от асинхронного вызова?

Q: Почему мои обработчики, подключенные к циклу, не работают правильно, и что я могу с этим поделать?
A: Javascript:динамически генерировать обработчик

В: Как я могу получить значения строки запроса?
A: Какполучить значения строки запроса в JavaScript?

В: Что use strict делает в JavaScript?
A: Чтоиспользует "строгий"? делать в JavaScript, и каковы причины этого?

В: Как я могу сделать страницу перенаправления в jQuery/JavaScript?
A: Какперенаправить на другую веб-страницу?

Q: Как отсортировать массив объектов по значению свойства?
A: Сортироватьмассив объектов по значению строкового свойства

Q: Я добавляю элементы с помощью JavaScript или jQuery на более позднем этапе и добавляю события, но они не запускаются, почему?
A: Возможно, вы захотите делегирование событий.

В: Как сохранить только элементы массива, которые соответствуют определенному условию?
A: Каксохранить только элементы массива, соответствующие определенному условию?

В: Как я могу отладить мой код JavaScript?
A: Какя могу отладить свой код JavaScript?

В: Что означает этот символ в JavaScript?
A: Чтоозначает этот символ в JavaScript?

Дополнительная информация:

Комната чата