По вопросам программирования на ECMAScript (JavaScript / JS) и его различных диалектах / реализациях (кроме ActionScript). Включите все соответствующие теги в свой вопрос; например, [node.js], [jquery], [json] и т. д.
JavaScript(диалект ECMAScript) - это высокоуровневая, динамичная, мультипарадигмальная, объектно-ориентированная, основанный на прототипах, слабо типизированный и интерпретируемый язык, традиционно используемый для сценариев на стороне клиента в веб-браузерах. JavaScript также может быть запущен вне браузера с использованием такой инфраструктуры, как Node.js, Nashorn, Wakanda или Google Apps Script. Несмотря на название, оно не связано с языком программирования Javaи имеет только внешнее сходство.
Примечание. Если не включен также тег для платформы или библиотеки, на вопросы с тегом javascriptожидается ответ на чистом JavaScript.
JavaScript работает практически во всех операционных системах, а движок включен в основные веб-браузеры. Разработано в 1995 году Бренданом Эйхомв Netscape Communications, изначально он назывался LiveScript, но был переименован в JavaScript из-за дружеских отношений Netscape с Sun Microsystems(создатели Java) в то время.
Также доступны автономные движки или интерпретаторы JavaScript, в том числе:
- Spidermonkey от Mozilla, первый в истории движок JavaScript, используемый в Mozilla Firefox.
- JavaScript-движок Google, 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's 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 10, известный как ECMAScript 2019, который был завершен в июне 2019 года.
Задавая вопрос JavaScript, вы должны:
- Отладьте свой код JavaScript (см. Creativebloq, MDN, Google < / a>, & MSDN).
- Изолируйте проблемный код и воспроизведите его в фрагмент кода переполнения стекаили внешняя онлайн-среда, такая как JSFiddle, JS Binили PasteBin(не забудьте также включить код в сам вопрос).
- Если используется библиотека или инфраструктура, пометьте вопрос соответствующими тегами: jqueryдля jQuery, prototypejsдля Prototype, mootoolsдля MooTools и т. д. Однако, если инфраструктура не используется или не нужна, не включайте эти теги.
- Если проблема на стороне клиента, укажите, в каком браузере возникли проблемы с кодом, и какие сообщения об ошибках, если таковые имеются, были выданы браузером. Используйте Инструменты разработчика для вашего браузера (см. «Полезные инструменты» ниже), чтобы увидеть эти сообщения. Если вопрос касается браузера, используйте теги firefox, google-chrome, internet-explorer, opera, safari, microsoft-edge, opera-miniи т. д.
- Помечайте вопрос как cssили html, если вы спрашиваете о проблеме, касающейся комбинации один из тех, у кого JavaScript, и на него можно было ответить только информацией, конкретно касающейся этих предметов
Изучение JavaScript
- Красноречивый JavaScript: современное введение в программирование
- Вы не знаете JS: серия книг, охватывающая все основные темы
- Руководство по MDN JavaScript: полное руководство по JavaScript в сети разработчиков Mozilla
- quirksmode.org - JavaScript. Хорошее введение в JavaScript и другие технологии, используемые в браузере (например, DOM).
- Учебник по JavaScript: книга по чистому JavaScript, охватывающая почти все.
- Учебное пособие и примеры кодов JavaScript: учебное пособие по чистому JavaScript и примеры кодов для реальных проблем, с которыми сталкивается JavaScript.
- Базовые навыки JavaScript. Введение, охватывающее основные основы программирования.
- quirksmode.org | Введение в события: подробное описание различных типов обработки событий. Включает обзор различных способов присоединения обработчиков событий и указывает на причуды между различными браузерами. Обязательно прочитайте, если вы хотите понять обработку событий.
- W3C Wiki | Основы JavaScript, DOM: полный список ссылок на учебные материалы W3C.
- Отладка JavaScript для начинающих: хорошее введение в отладку JavaScript. Обязательно читать!
- Современный JavaScript: разработка и дизайн: современное руководство по изучению JavaScript с использованием практических примеров и подходы, которые следует использовать сегодня.
- Изучение продвинутого JavaScript. Набор интерактивных упражнений, которые помогут вам пройти через некоторые фундаментальные концепции JavaScript.
- Руководство по стилю JavaScript: простое руководство, которое дает представление о стиле кода JavaScript.
- Нули в JavaScript: легко проверить, что возвращается при сравнении любых двух значений.
- JavaScript.RU: центральный JavaScript-ресурс для русскоязычного сообщества.
- JavaScript на польском языке: популярный сайт о JavaScript на польском языке.
- Учебники по JavaScript для W3 Schools: учебник для начинающих по JavaScript, включающий примеры "Попробуйте сами". Он также дает представление о сложных темах.
- Awesome JS: коллекция потрясающих библиотек JavaScript на стороне браузера, ресурсов и полезных вещей для начинающих и опытных программистов
Безопасность
JavaScript и DOM предоставляют злоумышленникам возможность создавать сценарии для запуска на клиентском компьютере через Интернет. Авторы браузера содержат этот риск, используя два ограничения. Во-первых, сценарии выполняются в песочнице, в которой они могут выполнять только веб-действия, а не задачи общего назначения, такие как создание файлов. Во-вторых, сценарии ограничены одной и той же политикой происхождения: сценарии с одного веб-сайта не имеют доступа к такой информации, как имена пользователей, пароли или файлы cookie, отправленные на другой сайт. Большинство ошибок безопасности, связанных с JavaScript, являются нарушениями той же политики происхождения или песочницы.
Политика безопасности контента - это основной метод обеспечения того, чтобы на веб-странице выполнялся только доверенный код.
XSS - это частая попытка украсть данные или нанести вред сайту через JavaScript.
Полезные инструменты
- Инструменты разработчика браузера
- Firefox Developer Edition
- Инструменты разработчика Firefox(документация)
- Инструменты разработчикадля IE
- Инструменты разработчика Chromeдля Chrome
- Веб-инспектордля Safari
- Способы предоставления живых демо
- Обнаружение ошибок и лучшие практики тестирования
- Форматирование кода
- Минификация кода
- Производительность Benchmarking Playground
Интерактивное обучение JavaScript
- Codecademy | JavaScript. Изучите основы JavaScript и динамического программирования.
- Udacity | Языки программирования. Ключевые понятия включают определение и обработку допустимых строк, предложений и структур программы.
- Code School. Изучите основы JavaScript и динамического программирования.
- Академия Хана: лучше всего узнать об анимации.
- Кодовые войны: изучите шаблоны и тренируйтесь с помощью викторин, опубликованных участниками сообщества.
Мудрость от переполнения стека
- Что должен знать каждый программист JavaScript?
- Скрытые возможности JavaScript?
- Как работают JavaScript-закрытия?
- Возвращаемое значение из функции с вызовом Ajax
- var functionName = function () {} против функции functionName () {}
- JavaScript: в чем разница между функцией и классом
- Статические переменные в JavaScript
- Как работает конструкция (function () {}) () и почему люди ее используют?
- Какова область применения переменных в JavaScript?
- Что означает этот символ в JavaScript?
- Как я могу отладить мой код JavaScript?
- Что возвращают методы querySelectorAll и getElementsBy *?
- Какой оператор равенства (== vs ===) следует использовать в сравнениях JavaScript?
Полезные ссылки
- Ссылка в Википедии
- Собственные JavaScript-эквиваленты методов jQuery
- Справочник MDN JavaScript
- W3C DOM Core, HTML, событияи таблицы совместимости CSSиз https://www.quirksmode.org/
- JSLintинструмент качества кода от Дуглас Крокфорд( и JSHint- управляемая сообществом ветвь оригинала)
- Минифайеры / обфускаторы кода: / packer /, YUI Compressor, Компилятор Google Closure, UglifyJS
- Форматировщик кода / деобфускатор: JSBeautifier
- Идиомы и ошибки: округление, Объект Date, Объект Number, Цепочка областей видимости
- JavaScript Garden
- FAQ по comp.lang.javascript: очень обширное руководство по особенностям JavaScript, созданное Usenet's comp.lang.javascript
- ECMA 262-5 Online: HTML-версия спецификации ECMAScript 5.
- Аннотированный ES5: аннотированный и гиперссылочный HTML-производный спецификации ECMAScript 5.
- HTML ECMAScript 6 спецификация.
- Матрица поддержки ECMAScript: подробный список возможностей для реализации ECMAScript.
- Таблица совместимости ES6
- JavaScript Weekly: бесплатный еженедельный бюллетень, куратор которого Питер Купер
- Node Weekly: бесплатный еженедельный бюллетень
- Приоритет оператора: таблица приоритетов и ассоциативности операторов
- Поддержка JavaScript в Opera Mini: способ работы JavaScript в Opera Mini, используемом веб-браузере людьми, которым нужно оптимизировать просмотр ресурсов
- https://nodeschool.ioПрактикуйтесь здесь: https: / /github.com/workshopper/javascripting
- Сравнительная таблица JS: полная таблица знака равенства в JavaScript
Бесплатные книги по программированию JavaScript
- JavaScript Крокфорда
- Красноречивый JavaScript
- Вы не знаете JS
- Основные шаблоны проектирования JavaScript и jQuery для начинающих
- Основы JavaScript
- Основы jQuery (начинается с основ JavaScript)
- Руководство по JavaScript для Mozilla Developer Network
- Корпоративная веб-разработка: с рабочего стола на мобильный
- Изучение шаблонов дизайна JavaScript - Адди Османи
- Шаблоны для крупномасштабной разработки JavaScript - Адди Османи
- JS Books - Бесплатные книги JavaScript
Видео
- Библиотека YUI
- Канал AngularJS
- LearnCode.academy
- Инструменты разработчика Google Chrome
- Кодексшкол JavaScript
Пример кода JavaScript
Этот скрипт отображает «Hello World» на вашем экране.
window.onload = function() {
alert('Hello World!');
};
Часто задаваемые вопросы
Найдите ответы на некоторые из наиболее часто задаваемых вопросов о JavaScript и связанных технологиях ниже.
В: У меня есть эта структура JSON. Как я могу получить доступ к свойству x.y.z
?
A: Как получить доступ и обрабатывать вложенные файлы? объекты, массивы или JSON?
Вопрос: Я добавляю события в цикл for, но все обработчики делают одно и то же. Почему?
A: Замыкание внутри циклов JavaScript - простой практический пример
В: Я хочу сравнить что-либо с несколькими значениями, есть ли простой способ сделать это?
A: Краткий способ сравнения с несколькими значениями
Вопрос: Как настроить правильное наследование?
A: Объекты не наследуются прототипные функции
Вопрос: Как работают замыкания JavaScript?
A: Как работают замыкания JavaScript?
Вопрос: Почему setTimeout()
внутри цикла for
всегда использует последнее значение?
A: setTimeout для -loop не печатает последовательные значения
Вопрос: Как вернуть ответ на вызов AJAX из функции?
A: Как вернуть ответ от асинхронного вызова?
В: Почему мои обработчики, подключенные к циклу, не работают правильно, и что я могу с этим поделать?
A: Javascript: генерировать динамически обработчик
Вопрос: Как получить значения строки запроса?
A: Как получить значения строки запроса в JavaScript?
В: Что use strict
делает в JavaScript?
A: "Что значит" использовать строгий "в JavaScript, и какова причина этого?
В: Как я могу сделать страницу перенаправления в jQuery / JavaScript?
A: Как перенаправить на другую веб-страницу?
Q: Как отсортировать массив объектов по значению свойства?
A: Сортировать массив объектов по значению строкового свойства
В: Как мне извлечь значение свойства в виде массива из массива объектов? A: из массива объектов, извлечь значение свойства в виде массива
Q: Я добавляю элементы с помощью JavaScript или jQuery на более позднем этапе и добавляю события, но они не запускаются, почему?
A: Возможно, вы захотите Делегирование событий.
В: Как я могу сохранить только элементы массива, которые соответствуют определенному условию?
A: Как сохранить только те элементы массива, которые соответствуют определенному условию?
В: Как я могу отладить мой код JavaScript?
A: Как это сделать Я отлаживаю свой код JavaScript?
Вопрос: Что означает этот символ в JavaScript?
A: Что означает этот символ значит в JavaScript?
Дополнительная информация
- Википедия на JavaScript
- MDN - учить JavaScript
- Создатель JavaScript, Брендан Эйх, объясняет происхождение