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. Изолируйте проблемный код и воспроизведите его во фрагменте кода Stack Overflow или во внешней онлайн-среде, такой как JSFiddle, JS Bin или PasteBin (не забудьте также включить код в сам вопрос).
  3. Если используется библиотека или инфраструктура, пометьте вопрос соответствующими тегами: для jQuery, для прототипа, для MooTools и т.д. Однако, если инфраструктура не используется или не нужна, не включайте эти теги.
  4. Если проблема на стороне клиента, укажите, в каком браузере возникли проблемы с кодом, и какие сообщения об ошибках, если таковые имеются, были выданы браузером. Используйте Инструменты разработчика для вашего браузера (см. "Полезные инструменты" ниже), чтобы увидеть эти сообщения. Если вопрос связан с браузером, используйте теги , , , , , , и т.д.
  5. Помечайте вопрос только как или , если вы спрашиваете о проблеме, касающейся комбинации одного из них с JavaScript и на которую можно ответить только с информацией, конкретно касающейся какой-либо из этих тем.

Изучение JavaScript

Безопасность

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

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

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

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

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

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

Мудрость от

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

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

Видео


Пример кода JavaScript

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

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

Демо!


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Комната чата