- •Типы данных в es2015. Какие есть типы, какие из них примитивные, в чём разница и каковы особенности? Для каких есть литералы? Оператор typeof.
- •Тип данных Number. Его особенности, свойства, методы.
- •Тип данных String. Его особенности, свойства, методы. Строковые шаблоны.
- •Доступ к символам
- •Изменения строк
- •Смена регистра
- •Поиск подстроки
- •Отрицательные аргументы
- •Кодировка Юникод
- •Тип данных Symbol. Его особенности, свойства, методы.
- •Объявление
- •Глобальные символы
- •Использование символов
- •Приведение типов, неявное и явное. Взаимодействие типов с операторами.
- •Строковое преобразование
- •Численное преобразование
- •Специальные значения
- •Логическое преобразование
- •Встроенные модальные окна.
- •Массивы, их методы, особенности.
- •Методы pop/push, shift/unshift
- •Типизированные массивы. В чём их отличие, зачем они нужны, как с ними работать?
- •Типизированные массивы
- •Условные операторы, операторы циклов, переходы и метки.
- •Оператор вопросительный знак „?“
- •Варианты объявления функций в es2015, чем они отличаются?
- •Параметры по умолчанию
- •Оператор spread вместо arguments
- •Деструктуризация в параметрах
- •Область видимости, понятие замыкания.
- •Специальные значения this и arguments внутри функции.
- •Функции-стрелки не имеют своего this. Внутри функций-стрелок – тот же this, что и снаружи.
- •Методы и свойства функций. Как с ними работать и когда их применять?
- •Что такое каррирование, как оно работает и зачем нужно? Что такое мемоизация?
- •Работа с объектом типа Date.
- •Создание
- •Получение компонентов даты
- •Установка компонентов даты
- •Автоисправление даты
- •Преобразование к числу, разность дат
- •Форматирование и вывод дат
- •Метод Date.Now()
- •Объект как хеш-таблица.
- •Конфигурируемые свойства объекта.
- •Атрибуты свойств
- •Дескрипторы свойств
- •Перечислимые свойства объекта
- •Иммутабельность объектов. Копирование объектов. Что такое иммутабельность?
- •Копирование по ссылке
- •Особенности системы наследования объектов.
- •Наследование свойств
- •Наследование "методов"
- •Объектно-ориентированное программирование, принципы, парадигмы.
- •Псевдо-классовое наследование в es5 и es2015. Как организуется, на чём базируется, что изменилось в es2015.
- •Функциональное наследование.
- •Встроенные коллекции в es2015.
- •Обработка исключений. Принципы работы и когда следует использовать.
- •Таймеры и периодические вызовы.
- •Отмена исполнения clearTimeout
- •Цикл событий, принципы работы асинхронности.
- •Промисы (promise), назначение и особенности работы. Использование async/await.
- •Пример с setTimeout
- •Параллельное выполнение
- •Как мы будем их использовать?
- •Генераторы (generators). В чём заключаются, как работают, когда могут применяться?
- •Создание генератора
- •Генератор – итератор
- •Yield – дорога в обе стороны
- •Асинхронный код
- •Синтаксис диалекта регулярных выражений, доступный в es2015. Метасимволы, группировки, обратные ссылки, квантификаторы, символьный класс и выбор, позиционные проверки.
- •Использование регулярных выражений в конструкциях языка. Методы и свойства объекта регулярных выражений, методы строк, результаты операций.
Изменения строк
Содержимое строки в JavaScript нельзя изменять. Нельзя взять символ посередине и заменить его. Как только строка создана – она такая навсегда.
Можно лишь создать целиком новую строку и присвоить в переменную вместо старой, например:
let str = "строка";
str = str[3] + str[4] + str[5];
alert( str ); // ока
Смена регистра
Методы toLowerCase() и toUpperCase() меняют регистр строки на нижний/верхний:
"Интерфейс".toUpperCase(); // ИНТЕРФЕЙС
Пример ниже получает первый символ и приводит его к нижнему регистру:
"Интерфейс" [0].toLowerCase(); // 'и'
Поиск подстроки
indexOf( searchString: string, fromIndex?: number )
- возвращает позицию, на которой находится подстрока или -1, если ничего не найдено. Например:
'test text'.indexOf( 't' ) // 0
'test text'.indexOf( 't', 1 ) // 3
'test text'.indexOf( 'te', 1 ) // 5
'test text'.indexOf( 'z' ) // -1
lastIndexOf( searchString: string, toIndex?: number )
— находит последнее вхождение подстроки `searchString` в строке до позиции `toIndex` (0..длина), если указана, иначе — до конца строки. Возвращается позиция первого символа (от нуля), или «-1», если вхождения нет.
'test text'.lastIndexOf( 't' ) // 8
'test text'.lastIndexOf( 't', 7 ) // 5
'test text'.lastIndexOf( 'te' ) // 5
'test text'.lastIndexOf( 'z' ) // -1
includes( searchString: string, position?: number ): Boolean
— проверяет вхождение подстроки `searchString` в строке, начиная от позиции `position` (0..длина), если указана, иначе — с начала строки. Возвращает `true`, если подстрока найдена, иначе — `false`.
'test text'.includes( 't' ) // true
'test text'.includes( 'st' ) // true
'test text'.includes( 'st', 3 ) // false
'test text'.includes( 'z' ) // false
endsWith( searchString: string, endPosition?: number ): Boolean
— проверяет, что строка завершается подстрокой `searchString`. Если указано `endPosition`, то строка считается данной длины, иначе поиск идёт до конца строки.
'test text'.endsWith( 't' ) // true
'test text'.endsWith( 'x' ) // false
'test text'.endsWith( 'st', 4 ) // true
'test text'.endsWith( 'st', 5 ) // false
Взятие подстроки: substr, substring, slice
В JavaScript существуют целых 3 метода для взятия подстроки, с небольшими отличиями между ними.
substring(start [, end])
- возвращает подстроку с позиции start до, но не включая end. Если аргумент end отсутствует, то идет до конца строки.
‘stringify’.substring(0,1)); // "s"
‘stringify’.substring(2)); // "ringify"
substr(start [, length])
- первый аргумент имеет такой же смысл, как и в substring, а второй содержит не конечную позицию, а количество символов. Если второго аргумента нет – подразумевается «до конца строки».
‘stringify’.substr(2,4); // ring
slice(start [, end])
- возвращает часть строки от позиции start до, но не включая, позиции end.
Отрицательные аргументы
Различие между substring и slice – в том, как они работают с отрицательными и выходящими за границу строки аргументами:
substring(start, end)
Отрицательные аргументы интерпретируются как равные нулю. Слишком большие значения усекаются до длины строки:
"testme".substring(-2); // "testme", -2 становится 0
Кроме того, если start > end, то аргументы меняются местами, т.е. возвращается участок строки между start и end:
"testme".substring(4, -1); // "test"
// -1 становится 0 -> получили substring(4, 0)
// 4 > 0, так что аргументы меняются местами -> substring(0, 4) = "test"
slice(start [, end])
Отрицательные значения отсчитываются от конца строки:
"testme".slice(-2); // "me", от 2 позиции с конца
"testme".slice(1, -1); // "estm", от 1 позиции до первой с конца.
