Памятка по синтаксису JavaScript для Node.js в примерах.
- Variable
- Data Type
- Function
- Term
- Error handling
- Array
- Object
- Cycle
- Async operations
- Regex
- Math
- Express
- Axios
- Fetch
- Cheerio
- Puppeteer
Variable
Переменная var
поддерживает любую область видимости и ее возможно объявить повторно (считается устаревшим методом и рекомендуется не использовать).
varVariable // Uncaught ReferenceError: varVariable is not defined (не определена)
if true
varVariable // true
varVariable // 123
Переменная let
позволяет изменять содержимое с другим типом данных (в отличии от const
), но ограничина областью видимости (в отличии от var
).
letVariable // Uncaught ReferenceError: letVariable is not defined
if true
letVariable // Uncaught ReferenceError: letVariable is not defined
letVariable
letVariable = 123
letVariable
Переменная константа const
требует обязательной инициализации во время объявления, и не позволяет изменять значение переменной после ее объявления.
constVariable = '123' // Uncaught TypeError: Assignment to constant variable (ошибка присвоения значения к постоянной переменной)
Data Type
typeof 32 // number
typeof 3 2// number
typeof 123n // bigint
typeof 'text' // string
typeof true // boolean
typeof false // boolean
typeof null // object
typeof // object
typeof // object
typeof // function
typeof 'id' // symbol
Преобразовать аргумент в число. Возвращает NaN
, если преобразование невозможно.
"123" // 123
"123.45" // 123.45
"abc" // NaN
undefined // NaN
true // 1
false // 0
null // 0
Преобразовать строку в целое число. Прекращает чтение, как только встречает нецифровой символ.
"123abc" // 123
"12.34" // 12
"abc123" // NaN
Преобразовать строку в число с плавающей точкой.
"123.45abc" // 123.45
"abc123.45" // NaN
Преобразовать значение в строку.
123 // "123"
true // "true"
123 // "123"
true // "true"
false // "false"
null // "null"
undefined // "undefined"
Преобразовать значение в булевое (логическое) значение. Все значения, кроме 0
, null
, NaN
, undefined
и пустой строки, преобразуются в true
.
123 // true
"Hello" // true
0 // false
!0 // true
!!0 // false
null // false
NaN // false
undefined // false
"" // false
Function
2,2 // 4
1,100 // Например, 44
Term
0 // 0 равно 0
5 // 5 меньше 10
15 // 15 больше или равно 10
'test' // Переданное значение - test - не подходит под заданные условия
Однострочный формат условия ?:
, который подходит для использования в теле переменной
input === 1 ? true : false // true
input = 2
input === 1 ? true : false // false
Проверить одно значение сразу на большое количество условий с помощью конструкции switch
1 // Понедельник
5 // Пятница
7 // Воскресенье
8 // Неправильно задан параметр
Error handling
10, 2
// 5
// Блок finally выполняется всегда
10, 0
// Ошибка: на ноль делить нельзя
// Блок finally выполняется всегда
Array
Классический массив и его методы.
array // Проверка, является ли переменная массивом (true)
array = 1 // Изменить содержимое элемента в массиве по индексу
// сортировка по умолчанию: [ 1, 2, 3 ]
// Поменять порядок следования: [ 3, 2, 1 ]
array + array + array // 6
array // undefined (не определено)
array = 4 // Добавить новый элемент в массив по индексу
5 // Добавить новый элемент с конца
array // 5
3,5 // Вывести содержимое массива с 4-го по 5-й индекс: [ 4, 5 ]
0 // Добавить элемент(ы) (через запятую) в начало массива
// Удалить первый элемент из массива
// Удалить последний элемент из массива
array // Вывести содержимое последнего элемента в массиве
1 // Выводит индекс первого вхождения элемента в массив, или -1, если элемент не найден
Вложенный массив, а также методы фильтрации и объединения:
// Добавить новый элемент в массив
// [ 'blue', 'green' ]
// объеденить два массива
// [ 'red', 'blue', 'green', 'blue', 'green' ]
// Метод reduce выполняет функцию для каждого элемента массива, чтобы получить одно итоговое значение (сумму)
accumulator + current, 0 // 3
Object
Преобразовать объект в массив и наоборот:
obj.b // 2
arr // 2
arr // { a: 1, b: 2, c: 3 }
Объект представляет из себя список пар (ключ-значение), разделенного запятыми. Используя переменную const
при объявлении объектов, возможно изменять содержимое дочерних элементов.
box.height // 8
box.style // { fg: 'white', bg: 'black' }
box.style.fg // white
box.style.fg = 'blue'
box.style.fg // blue
Объекты и вложенные массивы JavaScript
могут содержать дочерние массивы внутри []
и вложенные объекты внутри {}
.
Конвертация в JSON
:
Методы объекта назначаются через функции
1
// 9
2
// 11
Оператор return
используется для выхода из функции (т.е. последующий код не читается), который возвращает значение указанное после ключевого слова.
Cycle
Примеры циклов взяты из проекта multranslate, для проверки всех строк в массиве и увеличения количества видимых строк с учетом autowrap
. Имеется две реальных строки, необходимо узнать количество виртуальных строк с учетом длинны символов в строке. Например, если максимальная длинна одной строки составляет, 36
, то на одну реальную строку в 92
символа приходится дополнительно еще 2
виртуальных. Количество найденных виртуальных строк прибавляется к изначально зафиксированному значению количества всех реальных строк.
// На входе 2 строки, разделенные символом \r
// Фиксируем текущее максимальное количество строк и длинну символов в строке с учетом размеров окна
// Разбиваем текст на массив из строк
// Забираем реальное количество строк (2)
// Вывести количество строк в каждой строке массива
item.length // [ 13, 92 ]
Классический цикл for
итерирует числами с типом данных number
(int
/ integer
). С каждой интерацией объявленное значение (let i = 0
) увеличивается на заданное количество (i++
- на единицу), цикл завершается в случае успешного соблюдения условия (i < bufferLine.length
).
for ; i < bufferLine.length; i++
` ` // 6 36 3
// Уменьшаем значение на 1, для проверки в других циклах
viewLines--
for ; i < bufferLine.length; i++
` ` // 6 36 4
viewLines -= 2
Цикл for..in
итерирует по индексам массива, с типом данных string
. Сколько элементов в массиве (bufferLine.length
), столько и будет индексов (отсчет начинается с нуля).
for in bufferLine
` ` // 6 36 4
viewLines -= 2
Цикл for..of
итерирует по элементам массива, с уникальным типом данных каждого элемента в массиве.
for of array
// number
// string
// object
for of bufferLine
` ` // 6 36 4
viewLines -= 2
Метод массива forEach
выполняет указанную функцию для каждого элемента в массиве.
` ` // 6 36 4
viewLines -= 2
Цикл while
Выполняет тело цикла {}
до тех пор, пока условие истинно
while i < bufferLine.length
` ` // 6 36 4
viewLines -= 2
Цикл do..while
сначала выполняет тело цикла, а затем проверяет условие, это гарантирует, что интерация будет выполнена как минимум один раз.
i = 0
do while i < bufferLine.length
` ` // 6 36 4
Операторы:
continue
- прерывает текущую интерацию, для продолжения цикла с следующим значениемbreak
- прерывает и завершает цикл
for of arr
// Начало 0-й итерации
// Конец 0-й итерации
// Начало 1-й итерации
// Пропустить оставшуюся часть кода и перейти к следующей итерации
// Начало 2-й итерации
// Полностью выйти из цикла
Async operations
Promise
(промис) — это объект, который используется для обработки асинхронных операций, позволяя работать с результатами, когда они станут доступны, не блокируя основной поток выполнения. Он может находиться в одном из трех состояний:
Pending
(Ожидание): Операция только отправлена на выполнение или еще выполняется.Fulfilled
(Выполнен): Операция завершилась успешно.Rejected
(Отклонен): Операция завершилась с ошибкой.
С помощью ключевых слов resolve
(разрешить/успех) и reject
(отклонить/ошибка) производится управление возвращаемым результатом выполнения.
resulterror
Метод then
используется для обработки успешного выполнения промиса (в состоянии fulfilled
).
Метод catch
используется для обработки ошибок или отказов промиса (в состоянии rejected
).
async
— это ключевое слово, которое делает функцию асинхронной и позволяет использовать await
, чтобы приостановить выполнение до тех пор, пока все промисы не будут выполнены.
await
— это ключевое слово, которое используется внутри асинхронной функции (async). Оно заставляет ждать выполнения промиса и возвращает его результат.
// Импортируем функцию exec из модуля child_process, которая позволяет запускать команды операционной системы
// Основная функция выполнения команды ping в промис
// Асинхронная функция создания промисов и получения результатов
'192.168.3.0'
Использовать внешнюю библиотеку ping: npm install ping
// Асинхронная функция отправки команды ping через библиотеку
// Функция возврата промисов вручную без async
'192.168.3.0'
await Promise.all()
- дожидается успешного выполнения всех запросов. await Promise.allSettled()
- дожидается выполнения всех запросов не зависимо от успеха (возвращает статус и результат). await Promise.race()
- дожидается первого успешного выполнения, что бы получить результат от него не зависимо от его успеха.
Regex
Преобразовать строку в массив из букв (char
).
Метод split()
используется для преобразования строки в массив.
line = "1,2,3,4,5" // '1,2,3,4,5'
arr = "," // [ '1', '2', '3', '4', '5' ]
Метод join()
используется для объединение массива в строку.
// Собирает массив в строку: '2,3'
" - " // '2 - 3'
Метод match()
используется для поиска совпадений с регулярным выражением в строке. Он возвращает массив с найденными совпадениями или null
, если совпадений не найдено.
/текст/ // Получить содержимое первого совпадения
/текст/.index // Возвращает порядковый индекс первого совпадения в тексте (19)
/текст/i // Возвращает только первое совпадение без учета регистра
/текст/gi // Получить массив всех совпадений: [ 'Текст', 'текст' ]
stringForRegex = "2024-10-25"
/ - -/ // Группа захвата, которая возвращает полное совпадение, а также значения отдельных групп
// [ '2024-10-25', '2024', '10', '25', index: 0, input: '25-10-2024', groups: undefined ]
Метод search()
возвращает только индекс первого совпадения.
"Текст для проверки текста"'про' // 10
Метод replace()
заменяет найденные совпадения в строке на другие значения.
stringForRegex = "Текст для замены"
/для/, "после" // 'Текст после замены'
/^т/i, "Этот т" // 'Этот текст для замены'
/$/, "!" // 'Текст для замены!'
//, "$1 только" // 'Текст только для замены'
/\s[а-яА-Я]{3}/, "" // 'Текст замены'
/\s\p{L}+$/u, " кириллицы" // 'Текст для кириллицы'
stringForRegex = "Text for regex"
/\s\w{3}/, "" // Используется для замены любых латинских букв: 'Text regex'
/\s[a-zA-Z_]{3}/, "" // эквивалент \w
stringForRegex = "2024-10-25"
stringForRegex = / - -/,"$3.$2.$1" // Поменять порядок через группы захвата: '25.10.2024'
/\d{2}\./g, "11." // Заменяет найденные две идущие цифры подряд: '11.11.2024'
/\d{4}/, "2025" // Заменяет четыре идущие цифры подряд: '25.10.2025'
/20\d+/, "2025" // Заменяет 20 и любые идущие за ним цифры: '25.10.2025'
/10.+/g, "11.2025" // Заменяет 10 и любое количетво символов идущее за ним: '25.11.2025'
/\d{2,4}/g, "11" // Заменяет найденные цифры следующие в порядке от 2 до 4: ('11.11.11')
/[45]/g, "1" // Заменить 4 или 5 на 1: '21.10.2021'
Math
9, 10 // Получить наименьшее значение двух чисел: 9
9, 10 // Получить максимальное значение двух чисел: 10
10 / 3 // Округлить в меньшую сторону: 3
10/3 // Откруглить в большую сторону: 4
4 9 // Отбрасывание дробной части: 4
4 5 // Округление до ближайшего целого: 5
4 45 // Округление до ближайшего целого: 4
5 05 // Ближайшее число с плавающей точкой одинарной точности: 5.050000190734863
// Псевдослучайное число между 0 и 1, например, 0.2309471255442206
-7 // Получить абсолютное значение: 7
-3 // Определение знака числа (-1, 0, 1): -1
2, 3 // Возведение в степень: 8
16 // Квадратный корень: 4
27 // Кубический корень: 3
2, 4 // Целочисленное 32-битное умножение: 8
1 // Количество ведущих нулей в 32-битном представлении: 31
Express
Создаем директорию, инициализируем проект и устанавливаем зависимости
mkdir api && cd api
npm init -y
npm install express
Серверная часть API
сервера в файле server.js
// Middleware для парсинга JSON данных в теле запроса
// Обработка GET запроса с параметрами в пути и заголовками
'/user/:id',
// Обработка POST запроса с данными в теле запроса и заголовками
'/user',
// Запуск сервера на порту 3000
PORT,
Запуск сервера
node server.js
Axios
Клиентская часть для работы с API
npm install axios
Пример GET
запроса
// URL сервера
// Пример GET запроса с параметром id в пути и кастомным заголовком
await 1, 'Value'
// GET Ответ: {
// message: 'GET запрос для пользователя с ID 1',
// customHeader: 'Value'
// }
Пример POST
запроса
// Пример POST запроса с телом и заголовком авторизации
await 'KEY', 'Alex', 29
// POST Ответ: { message: 'Авторизация не пройдена, переданный токен: Bearer KEY' }
await 'TOKEN', 'Alex', 29
// POST Ответ: { name: 'Alex', age: 29 }
Fetch
result // { userId: 1, id: 1, title: 'delectus aut autem', completed: false }
result // '{"userId":1,"id":1,"title":"delectus aut autem","completed":false}'
Cheerio
Cheerio - это библиотека для работы с HTML
и XML
в Node.js
npm install axios cheerio https-proxy-agent iconv-lite
Подключаем библиотеки и получаем содержимое страницы с помощью Axios
через Proxy
// Имя агента в заголовке запросов (вместо axios)
// Создание экземпляра Axios с использованием конфигурации Proxy
// Отправляем запрос
// Декодируем ответ
html = response.data, 'utf8'
Вытаскиваем данные с помощью Cheerio
// Обращаемся к элементу div (не обязательно указывать название элемента) с id="ws" > div с id="index" > элемент "tbody" (таблица) > элемент "tr" (строки)
'div#ws #index tbody tr'.length // 171
// Исключить из вывода строку с class="backgr" (загловки столбцов)
'#ws #index tbody tr''.backgr'.length // 170
// Получить содержимое первого элемента "tr" в формате HTML, строки или текста без тегов
'#ws #index tbody tr''.backgr'0
'#ws #index tbody tr''.backgr'0
'#ws #index tbody tr''.backgr'0
// Получить содержимое элемента по частичному совпадению
'#ws #index tbody tr''.backgr''td:contains("слово")''\n',''
// 'Мужское слово (2024) WEB-DLRip'
// Получить содержимое второго элемента по индексу в строке (столбцe)
'#ws #index tbody tr''.backgr'0'td'1'\n',''
// 'Launcher for Zapret [v 1.3] (2024) PC | Portable'
// Получить содержимое атрибута "href" из элемента с классом "downgif"
'#ws #index tbody tr''.backgr'0'td a.downgif''href'
// '//d.rutor.info/download/1008549'
// Получить содержимое атрибута "href" из второго элемента "a" в элементе "td"
'#ws #index tbody tr''.backgr'0'td a:nth-child(2)''href'
// 'magnet:?xt=urn:btih:f1ca88b9421b243b6cb3d4da90e8fe133f381817&dn=rutor.info&tr=udp://opentor.net:6969&tr=http://retracker.local/announce'
// Фильтруем все элементы по частичному совпадению
'#ws #index tbody tr''.backgr'
// [
// '29 Окт 24 | Критик / The Critic (2023) WEB-DLRip 1080p от ExKinoRay | P | 6.10 GB | 1 4',
// '28 Окт 24 | Критик / The Critic (2023) WEB-DLRip | P | 1.46 GB | 58 22',
// '28 Окт 24 | Критик / The Critic (2023) WEB-DLRip-AVC от DoMiNo & селезень | P | 1.46 GB | 64 19',
// '28 Окт 24 | Критик / The Critic (2023) WEB-DL 1080p | P | RGB | 1 | 5.63 GB | 115 54'
// ]
// Собираем объект из всех элементов
'#ws #index tbody tr''.backgr'
// Конвертируем объект в формат JSON
torrents, null, 2
// [
// {
// "Date": "29 Окт 24",
// "Name": "Launcher for Zapret [v 1.3] (2024) PC | Portable",
// "Link": "https://rutor.info/torrent/1008549/launcher-for-zapret-v-1.3-2024-pc-portable",
// "DownloadLink": "https:////d.rutor.info/download/1008549",
// "Magnet": "magnet:?xt=urn:btih:f1ca88b9421b243b6cb3d4da90e8fe133f381817&dn=rutor.info&tr=udp://opentor.net:6969&tr=http://retracker.local/announce"
// },
// ...
// ]
Puppeteer
Puppeteer — это библиотека, которая предоставляет API
для автоматизации любых действий в браузерах Google Chrome и Mozilla Firefox через протокол Chrome DevTools
и WebDriver BiDi
.
mkdir api && cd api && npm init -y && npm install puppeteer
Пример получения списка файлов раздачи с сайта RuTor.
// Запускаем браузер и открываем новую пустую страницу
// Открываем страницу с ожиданием загрузки 60 сек
await `https://rutor.info/torrent/`,
await
// Дождаться загрузки результатов
// const elementHandle = await page.waitForSelector('#files')
// Ищем элемент с идентификатором #files и проверяем, что элемент существует его содержимое не содержит текст загрузки
await ,
// Забираем результат после успешной проверки
// Закрываем браузер
await
// Разбиваем полученные результаты на массив из строк (split) исключая первую строку (slince)
// Регулярное выражение для разбиения строки на название и размер
for of lines
torrents, null, 2
Пример создания API
для получения результатов проверки скорости интернета в формате JSON
через Ookla SpeedTest.
await `https://www.speedtest.net`,
// Дождаться, когда кнопка "Go" станет доступной
await 'span[data-testid="start-button"]'
// Возвращаем массив всех элементов span на странице с их текстом
await
// Находим и нажимаем на кнопку
await
// Функция для получения результата
// Цикл для проверки получения результата
// Проверяем, что результат содержит в начале строки 'http'
while !'http'
await
// Считываем данные из полученного url с помощью Fetch
// Вытаскиваем JSON из HTML страницы
resultObj.result.id // 16947429430
resultObj.result.download // 7169 (7.17)
resultObj.result.upload // 4939 (4.94)
resultObj.result.idle_latency // 171 (ping)
Copy Codehttps://lifailon.github.io/search_index.en.json$MATCHES more matches