Кавычки
В JavaScript есть разные типы кавычек.
Строку можно создать с помощью одинарных, двойных либо обратных кавычек.
Одинарные и двойные кавычки работают, по сути, одинаково, а если использовать обратные кавычки, то в такую строку мы сможем вставлять произвольные выражения, обернув их в
Ещё одно преимущество обратных кавычек — они могут занимать более одной строки, как на картинке выше.
Одинарные и двойные кавычки в языке с незапамятных времён: тогда потребность в многострочных строках не учитывалась. Что касается обратных кавычек, они появились существенно позже, и поэтому они гибче.
#кавычки #строки
В JavaScript есть разные типы кавычек.
Строку можно создать с помощью одинарных, двойных либо обратных кавычек.
Одинарные и двойные кавычки работают, по сути, одинаково, а если использовать обратные кавычки, то в такую строку мы сможем вставлять произвольные выражения, обернув их в
${…}
.Ещё одно преимущество обратных кавычек — они могут занимать более одной строки, как на картинке выше.
Одинарные и двойные кавычки в языке с незапамятных времён: тогда потребность в многострочных строках не учитывалась. Что касается обратных кавычек, они появились существенно позже, и поэтому они гибче.
#кавычки #строки
👍2
Function Expression
Функция в JavaScript – это не магическая языковая структура, а особого типа значение.
Синтаксис, который часто используется называется Function Declaration (Объявление Функции).
Существует ещё один синтаксис создания функций, который называется Function Expression (Функциональное Выражение).
На картинке выше функция создаётся и явно присваивается переменной, как любое другое значение. По сути без разницы, как мы определили функцию, это просто значение, хранимое в переменной
Смысл обоих примеров кода одинаков: "создать функцию и поместить её значение в переменную
#функции #function_expression
Функция в JavaScript – это не магическая языковая структура, а особого типа значение.
Синтаксис, который часто используется называется Function Declaration (Объявление Функции).
Существует ещё один синтаксис создания функций, который называется Function Expression (Функциональное Выражение).
На картинке выше функция создаётся и явно присваивается переменной, как любое другое значение. По сути без разницы, как мы определили функцию, это просто значение, хранимое в переменной
sayHi
.Смысл обоих примеров кода одинаков: "создать функцию и поместить её значение в переменную
sayHi
"#функции #function_expression
👍2
Браузерные события
Событие – это сигнал от браузера о том, что что-то произошло.
Все DOM-узлы подают такие сигналы (хотя события бывают и не только в DOM).
Вот список самых часто используемых DOM-событий:
События мыши:
-
-
-
-
-
События на элементах управления:
-
-
Клавиатурные события:
-
#браузерные_события #DOM
Событие – это сигнал от браузера о том, что что-то произошло.
Все DOM-узлы подают такие сигналы (хотя события бывают и не только в DOM).
Вот список самых часто используемых DOM-событий:
События мыши:
-
click
– происходит, когда кликнули на элемент левой кнопкой мыши (на устройствах с сенсорными экранами оно происходит при касании).-
contextmenu
– происходит, когда кликнули на элемент правой кнопкой мыши.-
mouseover
/ mouseout
– когда мышь наводится на / покидает элемент.-
mousedown
/ mouseup
– когда нажали / отжали кнопку мыши на элементе.-
mousemove
– при движении мыши.События на элементах управления:
-
submit
– пользователь отправил форму <form>.-
focus
– пользователь фокусируется на элементе, например нажимает на <input>.Клавиатурные события:
-
keydown
и keyup
– когда пользователь нажимает / отпускает клавишу.#браузерные_события #DOM
👍2❤1
Глобальный объект
Глобальный объект предоставляет переменные и функции, доступные в любом месте программы.
По умолчанию это те, что встроены в язык или среду исполнения.
В браузере он называется
Недавно
Ко всем свойствам глобального объекта можно обращаться напрямую.
В браузере глобальные функции и переменные, объявленные с помощью
#глобальный_объект #window
Глобальный объект предоставляет переменные и функции, доступные в любом месте программы.
По умолчанию это те, что встроены в язык или среду исполнения.
В браузере он называется
window
, в Node.js — global
, в другой среде исполнения может называться иначе.Недавно
globalThis
был добавлен в язык как стандартизированное имя для глобального объекта, которое должно поддерживаться в любом окружении. Ко всем свойствам глобального объекта можно обращаться напрямую.
В браузере глобальные функции и переменные, объявленные с помощью
var
(не let
/const
!), становятся свойствами глобального объекта.#глобальный_объект #window
👍5
Имена переменных
В JavaScript есть два ограничения, касающиеся имён переменных:
- Имя переменной должно содержать только буквы, цифры или символы
- Первый символ не должен быть цифрой.
Если имя содержит несколько слов, обычно используется верблюжья нотация, то есть, слова следуют одно за другим, где каждое следующее слово начинается с заглавной буквы:
Самое интересное – знак доллара '$' и подчёркивание '_' также можно использовать в названиях.
Это обычные символы, как и буквы, без какого-либо особого значения.
Важно помнить!!! Регистр имеет значение. Переменные с именами apple и AppLE – это две разные переменные.
#имена_переменных #основы
В JavaScript есть два ограничения, касающиеся имён переменных:
- Имя переменной должно содержать только буквы, цифры или символы
$
и _
.- Первый символ не должен быть цифрой.
Если имя содержит несколько слов, обычно используется верблюжья нотация, то есть, слова следуют одно за другим, где каждое следующее слово начинается с заглавной буквы:
myVeryLongName
.Самое интересное – знак доллара '$' и подчёркивание '_' также можно использовать в названиях.
Это обычные символы, как и буквы, без какого-либо особого значения.
Важно помнить!!! Регистр имеет значение. Переменные с именами apple и AppLE – это две разные переменные.
#имена_переменных #основы
👍2
new.target
Используя специальное свойство
В случае, если функция вызвана при помощи
Это можно использовать, чтобы отличить обычный вызов от вызова «в режиме конструктора».
Такой подход иногда используется в библиотеках для создания более гибкого синтаксиса, который позволяет разработчикам вызывать функции при помощи оператора new или без него.
#new_target #объекты
Используя специальное свойство
new.target
внутри функции, мы можем проверить, вызвана ли функция при помощи оператора new
или без него.В случае, если функция вызвана при помощи
new
, то в new.target
будет сама функция, в противном случае undefined
.Это можно использовать, чтобы отличить обычный вызов от вызова «в режиме конструктора».
Такой подход иногда используется в библиотеках для создания более гибкого синтаксиса, который позволяет разработчикам вызывать функции при помощи оператора new или без него.
#new_target #объекты
👍2
DOM-дерево
Основой HTML-документа являются теги.
В соответствии с объектной моделью документа («Document Object Model», коротко DOM), каждый HTML-тег является объектом. Вложенные теги являются «детьми» родительского элемента. Текст, который находится внутри тега, также является объектом.
Все эти объекты доступны при помощи JavaScript, мы можем использовать их для изменения страницы.
Например,
Если запустить код на картинке выше, то
#DOM #документ
Основой HTML-документа являются теги.
В соответствии с объектной моделью документа («Document Object Model», коротко DOM), каждый HTML-тег является объектом. Вложенные теги являются «детьми» родительского элемента. Текст, который находится внутри тега, также является объектом.
Все эти объекты доступны при помощи JavaScript, мы можем использовать их для изменения страницы.
Например,
document.body
– объект для тега <body>
.Если запустить код на картинке выше, то
<body>
станет красным на 3 секунды:#DOM #документ
👍4❤1🔥1
This media is not supported in your browser
VIEW IN TELEGRAM
Прокачивай свой технический английский без больших усилий, уделяя 5 минут в день!
На этом канале регулярно публикуют самые популярные слова и выражения из мира IT.
Подойдет всем IT-специалистам, которые хотят без труда читать документацию на английском и свободно общаться с иностранными заказчиками.
Подписывайся на @enforit и качай свой инглиш, пока компилируется проект👌
На этом канале регулярно публикуют самые популярные слова и выражения из мира IT.
Подойдет всем IT-специалистам, которые хотят без труда читать документацию на английском и свободно общаться с иностранными заказчиками.
Подписывайся на @enforit и качай свой инглиш, пока компилируется проект👌
👍1
This media is not supported in your browser
VIEW IN TELEGRAM
Прокачивай навыки JavaScript решая практические тесты!
На нашем втором канале JavaScript тесты каждый день выходят викторины на знание особенностей языка.
Подпишись, чтобы не потерять 👇
#javascript #тесты
На нашем втором канале JavaScript тесты каждый день выходят викторины на знание особенностей языка.
Подпишись, чтобы не потерять 👇
#javascript #тесты
👍2
У стрелочных функций нет «this»
Стрелочные функции особенные: у них нет своего «собственного»
Если мы используем this внутри стрелочной функции, то его значение берётся из внешней «нормальной» функции.
Например, на картинке выше
Это является особенностью стрелочных функций. Они полезны, когда мы на самом деле не хотим иметь отдельное значение
#this #стрелочные_функции
Стрелочные функции особенные: у них нет своего «собственного»
this
. Если мы используем this внутри стрелочной функции, то его значение берётся из внешней «нормальной» функции.
Например, на картинке выше
arrow()
использует значение this
из внешнего метода user.sayHi()
.Это является особенностью стрелочных функций. Они полезны, когда мы на самом деле не хотим иметь отдельное значение
this
, а хотим брать его из внешнего контекста.#this #стрелочные_функции
👍4
Set
Объект Set – это особый вид коллекции: «множество» значений (без ключей), где каждое значение может появляться только один раз.
Его основные методы это:
-
-
-
-
-
-
Основная «изюминка» – это то, что при повторных вызовах
#set #словари
Объект Set – это особый вид коллекции: «множество» значений (без ключей), где каждое значение может появляться только один раз.
Его основные методы это:
-
new Set(iterable)
– создаёт Set, и если в качестве аргумента был предоставлен итерируемый объект (обычно это массив), то копирует его значения в новый Set.-
set.add(value)
– добавляет значение (если оно уже есть, то ничего не делает), возвращает тот же объект set.-
set.delete(value)
– удаляет значение, возвращает true, если value было в множестве на момент вызова, иначе false.-
set.has(value)
– возвращает true, если значение присутствует в множестве, иначе false
.-
set.clear()
– удаляет все имеющиеся значения.-
set.size
– возвращает количество элементов в множестве.Основная «изюминка» – это то, что при повторных вызовах
set.add()
с одним и тем же значением ничего не происходит, за счёт этого как раз и получается, что каждое значение появляется один раз.#set #словари
👍6
Symbol.iterator
Symbol.iterator - специальный встроенный
Например, у нас есть объект
- Когда цикл
- Дальше
- Когда
- Результат вызова
#перебираемые_объекты #symbol_iterator
Symbol.iterator - специальный встроенный
Symbol
, который позволяет сделать объект итерируемым.Например, у нас есть объект
range
, который представляет собой диапазон чисел. Чтобы сделать range
итерируемым (и позволить for..of
работать с ним), нам нужно добавить в объект метод с именем Symbol.iterator
.- Когда цикл
for..of
запускается, он вызывает этот метод один раз (или выдаёт ошибку, если метод не найден). Этот метод должен вернуть итератор – объект с методом next
.- Дальше
for..of
работает только с этим возвращённым объектом.- Когда
for..of
хочет получить следующее значение, он вызывает метод next()
этого объекта.- Результат вызова
next()
должен иметь вид {done: Boolean, value: any}
, где done=true
означает, что итерация закончена, в противном случае value
содержит очередное значение.#перебираемые_объекты #symbol_iterator
👍5
Какого контента тебе не хватает на канале?
Anonymous Poll
45%
Тесты
36%
Интересные статьи
25%
Видео материалы
11%
Новости
13%
Развлекательный (мемы)
19%
Ничего менять не надо, всё и так хорошо
👍5
Fetch
JavaScript может отправлять сетевые запросы на сервер и подгружать новую информацию по мере необходимости.
Например, мы можем использовать сетевой запрос, чтобы:
- Отправить заказ
- Загрузить информацию о пользователе
- Запросить последние обновления с сервера
- …и т.п.
Метод
Базовый синтаксис:
-
-
Без options это простой GET-запрос, скачивающий содержимое по адресу url.
#fetch #сетевые_запросы
JavaScript может отправлять сетевые запросы на сервер и подгружать новую информацию по мере необходимости.
Например, мы можем использовать сетевой запрос, чтобы:
- Отправить заказ
- Загрузить информацию о пользователе
- Запросить последние обновления с сервера
- …и т.п.
Метод
fetch()
— современный и очень мощный, поэтому начнём с него. Он не поддерживается старыми (можно использовать полифил), но поддерживается всеми современными браузерами.Базовый синтаксис:
-
url
– URL для отправки запроса.-
options
– дополнительные параметры: метод, заголовки и так далее.Без options это простой GET-запрос, скачивающий содержимое по адресу url.
#fetch #сетевые_запросы
👍3
Прокрутка
Встроенное свойство «length» содержит количество параметров функции в её объявлении.
Событие прокрутки
Есть много хороших вещей, которые при этом можно сделать.
Например:
- Показать/скрыть дополнительные элементы управления или информацию, основываясь на том, в какой части документа находится пользователь.
- Подгрузить данные, когда пользователь прокручивает страницу вниз до конца.
Вот картинке выше функция для отображения текущей прокрутки.
#прокрутка #интерфейсные_события
Встроенное свойство «length» содержит количество параметров функции в её объявлении.
Событие прокрутки
scroll
позволяет реагировать на прокрутку страницы или элемента. Есть много хороших вещей, которые при этом можно сделать.
Например:
- Показать/скрыть дополнительные элементы управления или информацию, основываясь на том, в какой части документа находится пользователь.
- Подгрузить данные, когда пользователь прокручивает страницу вниз до конца.
Вот картинке выше функция для отображения текущей прокрутки.
#прокрутка #интерфейсные_события
👍6
Глобальный catch
Давайте представим, что произошла фатальная ошибка (программная или что-то ещё ужасное) снаружи
Существует ли способ отреагировать на такие ситуации?
Можно залогировать ошибку, показать что-то пользователю (обычно они не видят сообщение об ошибке) и т.д.
В браузере мы можем присвоить функцию специальному свойству window.onerror, которая будет вызвана в случае необработанной ошибки.
Синтаксис на картинке выше.
-
Сообщение об ошибке.
-
URL скрипта, в котором произошла ошибка.
-
Номера строки и столбца, в которых произошла ошибка.
-
Объект ошибки.
Роль глобального обработчика window.onerror обычно заключается не в восстановлении выполнения скрипта – это скорее всего невозможно в случае программной ошибки, а в отправке сообщения об ошибке разработчикам.
#глобальный_catch #обработка_ошибок
Давайте представим, что произошла фатальная ошибка (программная или что-то ещё ужасное) снаружи
try..catch
, и скрипт упал.Существует ли способ отреагировать на такие ситуации?
Можно залогировать ошибку, показать что-то пользователю (обычно они не видят сообщение об ошибке) и т.д.
В браузере мы можем присвоить функцию специальному свойству window.onerror, которая будет вызвана в случае необработанной ошибки.
Синтаксис на картинке выше.
-
message
Сообщение об ошибке.
-
url
URL скрипта, в котором произошла ошибка.
-
line
, col
Номера строки и столбца, в которых произошла ошибка.
-
error
Объект ошибки.
Роль глобального обработчика window.onerror обычно заключается не в восстановлении выполнения скрипта – это скорее всего невозможно в случае программной ошибки, а в отправке сообщения об ошибке разработчикам.
#глобальный_catch #обработка_ошибок
👍6
FormData
Если передать в конструктор элемент HTML-формы
Его особенность заключается в том, что методы для работы с сетью, например
Он будет соответствующим образом закодирован и отправлен с заголовком
То есть, для сервера это выглядит как обычная отправка формы.
P.S. на картинке выше пример отправки данных простой HTML формы с помощью
#formData #сетевые_запросы
FormData
- это объект, представляющий данные HTML формы.Если передать в конструктор элемент HTML-формы
form
, то создаваемый объект автоматически прочитает из неё поля.Его особенность заключается в том, что методы для работы с сетью, например
fetch
, позволяют указать объект FormData
в свойстве тела запроса body
.Он будет соответствующим образом закодирован и отправлен с заголовком
Content-Type: form/multipart
.То есть, для сервера это выглядит как обычная отправка формы.
P.S. на картинке выше пример отправки данных простой HTML формы с помощью
fetch
.#formData #сетевые_запросы
👍3
WebSocket
Протокол
В JavaScript
-
-
-
-
#WebSocket #сетевые_запросы
Протокол
WebSocket
, описанный в спецификации RFC 6455, обеспечивает возможность обмена данными между браузером и сервером через постоянное соединение. Данные передаются по нему в обоих направлениях в виде «пакетов», без разрыва соединения и дополнительных HTTP-запросов.WebSocket
особенно хорош для сервисов, которые нуждаются в постоянном обмене данными, например онлайн игры, торговые площадки, работающие в реальном времени, и т.д.В JavaScript
WebSocket
генерирует 4 события, с помощью которых и строится всё взаимодействие:-
open
– соединение установлено;-
message
– получены данные;-
error
– ошибка;-
close
– соединение закрыто.#WebSocket #сетевые_запросы
👍3
Server Sent Events
Спецификация Server-Sent Events описывает встроенный класс
Как и в случае с
Работа с потоком данных:
- Текст сообщения указывается после
- Сообщения разделяются двойным переносом строки
- Чтобы разделить сообщение на несколько строк, мы можем отправить несколько
Про сравнение SSE с WS.
Протокол SSE одновременно похож на WebSocket, но также сильно отличается. Например, данные отправляются лишь с сервера на клиент и могут иметь только текстовой формат. Однако это не делает
Основное преимущество в простоте использования, что делает
#sse #сетевые_запросы
Спецификация Server-Sent Events описывает встроенный класс
EventSource
, который позволяет поддерживать соединение с сервером и получать от него события.Как и в случае с
WebSocket
, соединение постоянно.Работа с потоком данных:
- Текст сообщения указывается после
data:
, пробел после двоеточия необязателен;- Сообщения разделяются двойным переносом строки
\n\n;
- Чтобы разделить сообщение на несколько строк, мы можем отправить несколько
data:
подряд (третье сообщение).Про сравнение SSE с WS.
Протокол SSE одновременно похож на WebSocket, но также сильно отличается. Например, данные отправляются лишь с сервера на клиент и могут иметь только текстовой формат. Однако это не делает
SSE
ненужным, напротив, у него своя ниша. Основное преимущество в простоте использования, что делает
SSE
более привлекательным для проектов, где вся мощь WS
абсолютно не требуется.#sse #сетевые_запросы
👍2🔥1