JavaScript
1. Введение
Программы на этом языке называются скриптами
Скрипты встраиваются в HTML и выполняться при загрузке страницы
Скрипты не нуждаются в компиляции
JS работает везде, где есть JS движок, который по другому называется интерпретатор
У браузера есть собственный движок, который иногда называют "виртуальной машиной JS"
У разных браузеров свои названия движков (которые полезно знать)
У хрома - V8
У firefox - SpiderMonkey
Движок работает так:
1. Читает текст скрипта
2. Компилируем в машинный язык.
3. Запускается машинный код и работает достаточно быстро
Возможности зависят от того, как каком окружении он работает.
В окружении Node.JS он поддерживает функции чтения/записи файлов, выполнения сетевых запросов ит.д.
NodeJS
В браузере ему ДОСПУПНО всё. Манипулировать веб-страницами, взаимодействовать с пользователем и веб-сервисом.
Может добавлять HTML код на страницу, изменить существующее содержимое, менять стили.
Может реагировать на действия пользователя, щелчки мыши, перемещение указателя, нажатие клавиш.
Может отправлять сетевые запросы на удаленные сервера
Может скачивать и загружать файлы (технологии AJAX, COMET)
AJAX
COMET
Получать и устанавливать куки, задавать вопросы посетителю, показывать сообщения.
Запоминать данные на стороне клиента - local storage
local storage
Что он НЕ МОЖЕТ. Возможности JS в браузере ограничены ради безопасности пользователя.
JS на веб-странице не может/читать/записывать файлы на жесткий диск, копировать или запускать программы. Он не умеет доступа к системным функциям ОС
Это возможно, только если пользователь перетаскивает файл в браузер, или выбирает его через <input>
Включить камеру, микрофон можно только с явного разрешения пользователя. Страница с JS не может незаметно включать веб-камеру
JS с одной страницы, не умеет доступа у другой странице, если они пришли с разных сайтов (с другого домена, протокола или порта)
Это называется "политика одинакового источника" (Same Origin Policy). Чтобы обойти это ограничение, обе страницы должны содержать JS код который спец. образом обменивается данными.
Страница http://anysite.com не должна иметь доступ к другой вкладке браузера с другим URL
Но это ограничение не действует, если JS используется вне браузера, например - на сервере. Современные браузеры предоставляют плагины, расширения, с помощью которых можно запрашивать доп. разрешения.
Он "безопасный", т.к. не предоставляет низкоуровневый доступ к памяти или проц.
В последнее время появилось много языков, которые транслируются (конвертируются) в JS, прежде чем запускаться в браузере
Современные инструменты делают трансляцию очень быстрой и простой, фактически предоставляя разр. писать код на другом языке, автоматически преобразуя его в JS
CoffeeScript
Вводит более короткий синтаксис, код лаконичнее.
TypeScript
от Microsoft
Flow
от Facebook
Dart
Предложен Google. ЯП для создания польз. интерфейсов.
Brython
Транспилирует Python в JS
2. Основы JS
1. Выполнение скрипта
Для серверных сред достаточно выполнить команду типа node my.js
для браузера - использовать тег script в любом месте HTML
Если JS кода много, то его лучше поместить в отдельный файл
Можно указать ссылку на скрипт
Для подключения нескольких скриптов, используется несколько тегов
Как правило только простейшие скрипы указываются внутри HTML. Более сложные создаются в отдельном файле.
Польза от отдельных файлов в том, что браузер загрузит скрипт отдельно и сможет хранить его в кеше (web cache)
другие страницы, которые подключают тот же скрипт, смогут брать его из кеша вместо повторной загрузки из сети. Таким образом файл будет загружаться из сети только 1 раз.
Если для тега <script> установлен атрибут scr='file.js', то содержимое внутри тега будет игнорироваться.
атрибуты type и language необязательны
2. Структура кода
Инструкции
alert('Привет, мир!') - это инструкция. т.е. команды, которые выполняют действия
Инструкции отделяются знаком ; Инструкций может быть сколько угодно
Обычно все инструкции пишут с новой строчки для удобства. В этом случае не обязательно ставить ; Будет работать и без них.
Он интерпретирует это как "неявную" точку с запятой. Но он и понимает "незавершенные выражения", и тогда воспринимает это как 1 строку.
Есть ситуации, когда JS все же неправильно понимает разделение. Так что лучше всегда ставить ; Это правило широко распространено среди разработчиков.
//Комментарии
/*многострочный
комментарий*/
3. Строгий режим - "use strict"
это Деректива
строчка "use strict" в начале всего кода указывается для того, чтобы устаревший код работал. Это значит что сценарий работает в современном режиме.
Со строчкой "use strict" т.е. в строгом режиме можно находить ошибки быстрее. Избегать в коде устаревших вещей, которые будут приводить к ошибкам.
Его можно использовать как для всего кода, так и для отдельных функций
Обычно его используют для всего файла. Указывается в самом начале файла
Когда входим в строгий режим, то отменить его уже нельзя
В консоли браузера "use strict" по умолчанию выключен
Когда это имеет значение, можно получить неправильные результаты. Нужно просто его дописать через Shift+Enter
В старых браузерах он указывается внутри функции
Строгий режим был введён в ECMAScript 5, и старые браузеры (IE9 и младше) его не поддерживают
Очень желательно добавлять "use strict" в начале скриптов. Позже, когда весь код будет состоять из классов и модулей, директиву можно будет опустить
4. Переменные
объявляем с помощью let (в старых скриптах - var)
Можно объявлять несколько переменных в 1 строке. Но лучше так не делать.
Повторное объявление той же переменной является ошибкой
В Scala, Erland значение однажды заданной переменной менять уже нельзя. Это дает преимущества при параллельном вычислении.
Имя переменной не может начинаться с цифры
Имя переменной может содержать только такие символы "$" "_"
Если используется несколько слов, то писать верблюжьей нотацией. (myVeryLongName)
Переменные apple и Apple это разные переменные
Нелатинские разрешены, но не рекомендуются
в старых версиях js let и var можно было не указывать. но с 'use strict' это будет приводить к ошибкам
const
const - попытка изменить константу приведет к ошибке. Если уверен, что переменная никогда не будет меняться, создаем константу
const часто используется для труднозапоминаемых значений. пишутся капсом и с _
Есть константы, которые вычисляются во время выполнения сценария, но не изменяются после их первоначального назначения.
Неизменяемые константы писать КАПСОМ
Именование переменных - важный и сложный навык в программировании. Быстрый взгляд на имена переменных может показать, какой код был написан новичком, а какой - опытным разработчиком. В реальном проекте большая часть времени тратится на изменение и расширение существующей кодовой базы, а не написание чего-то нового с нуля.
Пожалуйста, потратьте больше времени на обдумывание правильного имени переменной перед её объявлением.
userName или shoppingCart - хорошие
data и value - плохие. Можно, только если очевидно какие данные хранит переменная
не используй повторно одну и ту же переменную. Дополнительная переменная - это добро, а не зло.
5. Типы данных
есть 8 основных типов данных
number
Тут как целочисленные, так и с плавающей точкой
Кроме обычных чисел, существуют "спец. числовые значения", которые относятся к таким типам данных
Infinity
Математическая бесконечность (Например, это деление на ноль)
Возвращает Infinity
-Infinity
NaN
Вычислительная ошибка. Например, когда строку делам на число
Возвращает NaN
Эти ошибки безопасны - т.е. скрипт не встанет с фатальной ошибкой. В худшем случае получим NaN
number не может содержать число больше (2^53-1) (т. е. 9007199254740991)
Когда число реальное большое (в криптографии, например), используется тип BigInt (число произвольной длинны). Для этого достаточно добавить n в конце числа
String
Есть 3 типа кавычек
"_" и '_' нечем не отличаются
`_` а это функциональные кавычки. Позволяют вставлять какое-то выражение в строку
В С и Java для одного символа есть тип данных char. В JS один символ это тоже String
boolean
true/false
"null"
это не тип данных. Он показывает что значение переменной неизвестно "ничего", "пусто"
"undefined"
Это тоже не тип данных. Означает "значение не было присвоено".
обычно используется для проверок, была ли переменная назначена
object
В отличии от остальных "примитивных", object - особенный. В них хранятся коллекции данных или более сложные структуры
symbol
используется для создания уникальных идентификаторов в объектах.
typeof
возвращает тип аргумента. Обычно используется в проверках. Может работать как в скобках, так и без.
type x;
type(x)
Переменная в JS может содержать любые данные. Меняя значение переменной, тип данных можно не указывать.
Это называется "динамическая типизация" - переменная не привязана ни к одному типу данных
6. Взаимодействие: alert, prompt, confirm
alert
prompt
принимает 2 аргумента:
result = prompt(title, [default]);
окно с вводом текста и кнопками Ok, Отмена
[] - означает, что параметр необязательный
Введенный пользователем текст будет присвоен переменной result
confirm
окно с вопросом и ответами ОК и Отмена
result = confirm(question);
на все 3 метода есть ограничения
1. Расположение окна определяется браузером
2. Мы не можем изменить внешний вид
7. преобразование типов
Когда нужно явное преобразование
Если строка не может быть явно приведена к другому типу, то получаем NaN
Преобразование строки в булиан "0" это true. Пробел это тоже true. Если в строчке ничего, то false
8. Базовые операторы. Математика
меняем знак на противоположный
% остаток от деления
** возведение в степень
При + если 1 оператор строка, то второй тоже будет преобразован в строку. И это только с +
Если - или /, то стринг всегда будет преобразован в число
Чтобы преобразовать строку в число, достаточно поставить перед ним +
9. Операторы сравнения
10. Условные ветвления: if, '?'
if
?
11. Логические операторы
12. Операторы объединения
13. Циклы while, for
while
for
14. Конструкция switch
15. Функции
16. Function Expression
17. Функции-стрелки, основы
18. Особенности JavaScript