String.prototype.includes()
Содержание:
- Наши Услуги
- Сравнение с null и undefined
- Логическое преобразование
- Квадратные скобки
- Передача баз PostgreSQL на удалённый сервер резервных копий, удобное восстановление. Почасовой и ежесуточный вариант. В общем, ещё один скрипт
- Январь 2015
- Частые вопросы по стихам и песне
- Функции-«колбэки»
- Объединение
- Шаблонные литералы (строки) в JavaScript
- Конкатенация
- Читайте также:
- CLR декодер для MS SQL Server
- Кавычки
- Риком-Траст
- Условное выделение ячеек
- Сравнение различных типов
- Нумерация и доступ к символам строки
- Преобразование в числа
- Разбиение на массив
- [] и charAt
- Округление
- История чата
- Нюансы сравнения строк
Наши Услуги
Сравнение с null и undefined
Поведение и при сравнении с другими значениями — особое:
- При строгом равенстве
-
Эти значения различны, так как различны их типы.
- При нестрогом равенстве
-
Эти значения равны друг другу и не равны никаким другим значениям. Это специальное правило языка.
- При использовании математических операторов и других операторов сравнения
-
Значения преобразуются к числам: становится , а – .
Посмотрим, какие забавные вещи случаются, когда мы применяем эти правила
И, что более важно, как избежать ошибок при их использовании
Сравним с нулём:
С точки зрения математики это странно. Результат последнего сравнения говорит о том, что » больше или равно нулю», тогда результат одного из сравнений выше должен быть , но они оба ложны.
Причина в том, что нестрогое равенство и сравнения работают по-разному. Сравнения преобразуют в число, рассматривая его как . Поэтому выражение (3) истинно, а ложно.
С другой стороны, для нестрогого равенства значений и действует особое правило: эти значения ни к чему не приводятся, они равны друг другу и не равны ничему другому. Поэтому (2) ложно.
Значение несравнимо с другими значениями:
Почему же сравнение с нулём всегда ложно?
На это есть следующие причины:
- Сравнения и возвращают , потому что преобразуется в , а – это специальное числовое значение, которое возвращает при любых сравнениях.
- Нестрогое равенство возвращает , потому что равно только , и ничему больше.
Зачем мы рассмотрели все эти примеры? Должны ли мы постоянно помнить обо всех этих особенностях? Не обязательно. Со временем все они станут вам знакомы, но можно избежать проблем, если следовать надёжным правилам:
Относитесь очень осторожно к любому сравнению с , кроме случаев строгого равенства .
Не используйте сравнения с переменными, которые могут принимать значения , разве что вы полностью уверены в том, что делаете. Если переменная может принимать эти значения, то добавьте для них отдельные проверки.
Логическое преобразование
Преобразование к происходит в логическом контексте, таком как , и при применении логических операторов.
Все значения, которые интуитивно «пусты», становятся . Их несколько: , пустая строка, , и .
Остальное, в том числе и любые объекты – .
Полная таблица преобразований:
Значение | Преобразуется в… |
---|---|
, | |
Числа | Все , кроме , — . |
Строки | Все , кроме пустой строки — |
Объекты | Всегда |
Для явного преобразования используется двойное логическое отрицание или вызов .
Обратите внимание: строка становится
В отличие от многих языков программирования (например PHP), в JavaScript является , как и строка из пробелов:
Логическое преобразование интересно тем, как оно сочетается с численным.
Два значения могут быть равны, но одно из них в логическом контексте , другое – .
Например, равенство в следующем примере верно, так как происходит численное преобразование:
… А в логическом контексте левая часть (0) даст , правая («\n0\n») – , так как любая не пустая строка в логическом контексте равна :
С точки зрения преобразования типов в JavaScript это совершенно нормально. При сравнении с помощью «==» – численное преобразование, а в – логическое, только и всего.
Квадратные скобки
Для свойств, имена которых состоят из нескольких слов, доступ к значению «через точку» не работает:
JavaScript видит, что мы обращаемся к свойству , а затем идёт непонятное слово . В итоге синтаксическая ошибка.
Точка требует, чтобы ключ был именован по правилам именования переменных. То есть не имел пробелов, не начинался с цифры и не содержал специальные символы, кроме и .
Для таких случаев существует альтернативный способ доступа к свойствам через квадратные скобки. Такой способ сработает с любым именем свойства:
Сейчас всё в порядке
Обратите внимание, что строка в квадратных скобках заключена в кавычки (подойдёт любой тип кавычек)
Квадратные скобки также позволяют обратиться к свойству, имя которого может быть результатом выражения. Например, имя свойства может храниться в переменной:
Здесь переменная может быть вычислена во время выполнения кода или зависеть от пользовательского ввода. После этого мы используем её для доступа к свойству. Это даёт нам большую гибкость.
Пример:
Запись «через точку» такого не позволяет:
Мы можем использовать квадратные скобки в литеральной нотации для создания вычисляемого свойства.
Пример:
Смысл вычисляемого свойства прост: запись означает, что имя свойства необходимо взять из переменной .
И если посетитель введёт слово , то в объекте теперь будет лежать свойство .
По сути, пример выше работает так же, как и следующий пример:
…Но первый пример выглядит лаконичнее.
Мы можем использовать и более сложные выражения в квадратных скобках:
Квадратные скобки дают намного больше возможностей, чем запись через точку. Они позволяют использовать любые имена свойств и переменные, хотя и требуют более громоздких конструкций кода.
Подведём итог: в большинстве случаев, когда имена свойств известны и просты, используется запись через точку. Если же нам нужно что-то более сложное, то мы используем квадратные скобки.
Передача баз PostgreSQL на удалённый сервер резервных копий, удобное восстановление. Почасовой и ежесуточный вариант. В общем, ещё один скрипт
Январь 2015
Заработок
Полагаю, именно за этим все мы здесь и собрались. Большинство цифр – это примерные значения, так как сайты подсчитывают выплаты через несколько месяцев, однако текущие данные более или менее точны.
- Чаевые: $716.88
- Подписчики в Twitch: $212.50
- Доход от рекламы в Twitch: $61.92
- Кастинг с Basetrade: $44
- Доход от рекламы на YouTube: $12.49
Итого: $1048
Цифры/Прогресс
У меня есть данные предыдущих месяцев, а в следующем отчете я смогу сравнить результаты с текущим месяцем. Итак, вот чем я располагаю на сегодняшний день:
- Подписчики в Twitch: 86, не уверен, сколько было в начале месяца
- Фолловеры в Twitch: 5792, +1025 в январе
- Среднее количество конкурентов в Twitch: 165~ Сложно об этом судить, так как не предоставляет подобную статистику, а просто отображает график. Данные были взяты на сайте Fuzic.nl и могут не соответствовать действительности.
- Просмотры на YouTube: всего 753218, +21663 в январе
- Подписчики на YouTube: 7125, +135 в январе
- Фолловеры в Twitter: 1870, не уверен, сколько было в начале
- Фолловеры в Facebook: 461, не уверен, сколько было в начале (честно говоря, я редко пользуюсь Facebook)
Анализ
Январь удался в плане времени, вложенного в стриминг. С другой стороны, пострадало много других важных для меня вещей, в частности, здоровье. Как я уже говорил, создание контента для YouTube в январе начало заметно хромать, так как я был истощен после длительных ежедневных стримов. В феврале это изменится. Ролики на YouTube очень важны, в особенности, для более широкой аудитории, так как короткое видео может развлечь или чему-то обучить за гораздо меньшее время. Мои планы: меньше времени на стримы, новый график для повышения качества сна и принятие окончательного решения по поводу Heroes of the Storm (кастинг, игра, проведение турниров и т.д.).
Вот, пожалуй, и все. Надеюсь, я помог вам составить представление о том, сколько в действительности зарабатывают стримеры. Возможно, все это поможет кому-то воплотить свою мечту в реальность.
Частые вопросы по стихам и песне
Функции-«колбэки»
Рассмотрим ещё примеры функциональных выражений и передачи функции как значения.
Давайте напишем функцию с тремя параметрами:
- Текст вопроса
- Функция, которая будет вызываться, если ответ будет «Yes»
- Функция, которая будет вызываться, если ответ будет «No»
Наша функция должна задать вопрос и, в зависимости от того, как ответит пользователь, вызвать или :
На практике подобные функции очень полезны. Основное отличие «реальной» функции от примера выше будет в том, что она использует более сложные способы взаимодействия с пользователем, чем простой вызов . В браузерах такие функции обычно отображают красивые диалоговые окна. Но это уже другая история.
Аргументы функции ещё называют функциями-колбэками или просто колбэками.
Ключевая идея в том, что мы передаём функцию и ожидаем, что она вызовется обратно (от англ. «call back» – обратный вызов) когда-нибудь позже, если это будет необходимо. В нашем случае, становится колбэком’ для ответа «yes», а – для ответа «no».
Мы можем переписать этот пример значительно короче, используя Function Expression:
Здесь функции объявляются прямо внутри вызова . У них нет имён, поэтому они называются анонимными. Такие функции недоступны снаружи (потому что они не присвоены переменным), но это как раз то, что нам нужно.
Подобный код, появившийся в нашем скрипте выглядит очень естественно, в духе JavaScript.
Функция – это значение, представляющее «действие»
Обычные значения, такие как строки или числа представляют собой данные.
Функции, с другой стороны, можно воспринимать как «действия».
Мы можем передавать их из переменной в переменную и запускать, когда захотим.
Объединение
Рассмотрим основные аспекты, связанные с объединением строк и строковых переменных.
Стандартный способ:
let s1 = ‘Hello’;
let s2 = ‘world’;
let s3 = s1 + s2 + ‘!’;
console.log(s3); // Hello world!
Вместо одинарных кавычек можно использовать двойные. Кроме этого, кавычки внутри строки можно экранировать обратным слешем.
let s1 = «It’s string»;
let s2 = ‘It\’s string’;
Применяется в JavaScript и ещё один тип кавычек — обратные. Их применяют для использования переменных внутри строк.
let s1 = ‘Hello’;
let s2 = ‘world’;
let s3 = `${s1} ${s2}!`;
console.log(s3); // Hello world!
Ещё один способ объединения, использовать функцию «concat».
let s1 = ‘Hello’;
let s2 = ‘world’;
let s3 = s1.concat(‘ ‘, s2, ‘!’);
console.log(s3); // Hello world!
Здесь в переменную «s3», будет присваиваться значение переменной «s1», объедененное с пробелом, «s2» и восклицательным знаком
Важно, значение «s1» не изменится
Шаблонные литералы (строки) в JavaScript
Шаблонными литералами называются строковые литералы, допускающие использование выражений внутри, обозначаемых знаком $ и фигурными скобками (${выражение}). Заключаются в обратные кавычки () (буква «ё»). Позволяют использовать многострочные литералы и строковую интерполяцию.
JavaScript
const firstName = «Alex»;
const lastName = «NAV»;
const age = 40;
let str;
// Использование выражений внутри литерала
str = `Hello, my name ${firstName} ${lastName}, i’m ${age} years old`;
console.log(str);
// Пример многострочного литерала
str = `
<ul>
<li>First name: ${firstName}</li>
<li>Last name: ${lastName}</li>
<li>Age: ${age}</li>
<li>Math.random: ${Math.random().toFixed(2)}</li>
</ul>
`;
document.body.innerHTML = str;
1 |
constfirstName=»Alex»; constlastName=»NAV»; constage=40; let str; str=`Hello,myname${firstName}${lastName},i’m${age}years old`; console.log(str); str=` <ul> <li>First name${firstName}<li> <li>Last name${lastName}<li> <li>Age${age}<li> <li>Math.random${Math.random().toFixed(2)}<li> <ul> `; document.body.innerHTML=str; |
Результат выполнения кода
Конкатенация
Конкатенация
— это объединение двух или более строк в одну большую. Объединение происходит с помощью оператора +
(плюс). При конкатенации каждая последующая строка добавляется в конец предыдущей:
Var str1 = «Hello «;
var str2 = «World!»;
document.write(str1 + str2 + «»); // «Hello World!»
document.write(str1 + «World!»);
Попробовать »
Значение любого типа, которое объединяется со строкой, будет неявно (автоматически) преобразовано в строку и далее будет произведена конкатенация.
Var str1 = «Hello «;
alert(str1 + 1); // «Hello 1»
alert(true + str1); // «trueHello»
alert(str1 + NaN); // «Hello NaN»
Читайте также:
CLR декодер для MS SQL Server
Кавычки
Строки в JavaScript должны быть заключены в кавычки. В JavaScript существует три вида кавычек: двойные (), одинарные () и обратные ():
"Строка в двойных кавычках" 'Строка в одинарных кавычках' `Строка в обратных кавычках`
Вид кавычек в начале и конце строки должен совпадать.
Строки могут состоять из нуля и более символов:
'' // Пустая строка "Строка" // Не пустая строка
Строки с двойными и одинарными кавычками ничем не отличаются между собой по функционалу – они могут содержать лишь текст и управляющие последовательности. А вот строки с обратными кавычками имеют более широкий функционал. Такие строки могут содержать так называемые подстановки, обозначаемые знаком доллара и фигурными скобками . Подстановки могут содержать любые произвольные выражения:
let стр = "Мир!"; let стр2 = `Привет, ${стр}`; // Использование переменной в строке alert(стр2); // Привет, Мир! alert(`2 + 3 = ${2 + 3}.`); // 2 + 3 = 5.
Выражение, расположенное в подстановке () вычисляется, и его результат становится частью строки.
Строки в обратных кавычках могут занимать более одной строки, сохраняя все пробельные символы:
let числа = `Числа: 1 2`; alert(числа); // Числа: // 1 // 2
Строки с обратными кавычками называются строками-шаблонами или шаблонными литералами.
Строки, заключённые в одни кавычки, могут содержать другие кавычки:
"одинарные 'кавычки' и `обратные` внутри двойных" 'а здесь "так" и `так`!' `а здесь "так" и 'так'!`
Для удобства, большие строковые литералы можно разбивать на несколько строк, заканчивая каждую строку, кроме последней, символом :
alert("это всё одна \ длинная \ строка"); // это всё одна длинная строка alert('это всё одна \ длинная \ строка'); // это всё одна длинная строка alert(`это всё одна \ длинная \ строка`); // это всё одна длинная строка
Риком-Траст
Условное выделение ячеек
Сравнение различных типов
Сравнение данных различных типов может привести к неожиданным результатам.
При сравнении строки с числом, JavaScript преобразует строку в число при выполнении сравнения. Пустая строка превращается в 0. нечисловая строка преобразуется в NaN , которое всегда ложно.
случай | Стоимость | Пытаться |
---|---|---|
2 < 12 | true | Попробуй » |
2 < «12» | true | Попробуй » |
2 < «John» | false | Попробуй » |
2 > «John» | false | Попробуй » |
2 == «John» | false | Попробуй » |
«2» < «12» | false | Попробуй » |
«2» > «12» | true | Попробуй » |
«2» == «12» | false | Попробуй » |
При сравнении двух строк, «2» будет больше, чем «12», так как (в алфавитном порядке) 1 меньше, чем 2.
Для обеспечения должного результата, переменные должны быть преобразованы в соответствующий тип перед сравнением:
age = Number(age);
if (isNaN(age)) {
voteable = «Error in input»;
} else {
voteable = (age < 18) ? «Too young» : «Old enough»;
}
Нумерация и доступ к символам строки
Как уже было сказано, строка представляет собой упорядоченную последовательность 16-битных значений, каждому из которых соответствует определённый символ. Нумерация 16-битных значений в строке начинается с нуля, т. е. первое 16-битное значение находится под индексом 0, второе — под индексом 1 и т. д. Индекс — это порядковый номер.
Получить символ строки (состоящий из одного 16-битного значения) можно с помощью индекса, заключённого в квадратные скобки :
Let стр = «Привет»;
alert(стр); // П
alert(стр); // В
Чтобы с помощью индексов обратиться к символу, состоящему из двух 16-битных значений, нужно, используя конкатенацию, написать эти индексы так, чтобы в результате получилась последовательность из двух 16-битных значений:
Let стр = «?»;
alert(стр + стр); // «?»
Преобразование в числа
Функция преобразует значения по следующим правилам:
- Логические значения и преобразуются в и соответственно.
- Числа возвращаются без изменения.
- Значение преобразуется в .
- Значение преобразуется в .
Для строк действуют особые правила:
- Если строка содержит только цифры с начальным знаком или либо без знака, она всегда преобразуется в целое десятичное число. Начальные нули игнорируются, например «0011» преобразуется в 11.
- Если строка представляет собой число с плавающей точкой с начальным знаком + или — либо без знака, она преобразуется в соответствующее число с плавающей точкой (начальные нули также игнорируются).
- Если строка представляет собой число в шестнадцатеричном формате, она преобразуется в соответствующее целое десятичное число.
- Если строка пустая, она преобразуется в .
- Если строка содержит что-то отличное от предыдущих вариантов, она преобразуется в .
- Для объектов вызывается метод , а возвращаемое им значение автоматически преобразуется по предыдущим правилам. Если это преобразование даёт в результате , вызывается метод и применяются правила преобразования строк в числа.
Унарные операторы и работают по тем же правилам, что и функция .
Разбиение на массив
-
Рассмотрим функцию разбиения строки на массив. В качестве разделителя между элементами указан пробел.
let s = 'Happy new 2020 year!'; let a = s.split(' '); console.log(a); //
-
Обратная функция «join».
let a = ; let s = a.join(' '); console.log(a); // Happy new 2020 year!
В совокупности эти две функции позволяют быстро конвертировать строку в массив, произвести с каждым элементом какие-то манипуляции и возвратить обратно строку. Например, вот как быстро можно обернуть каждый символ строки в тег span:
let s = 'Hello'; s = s.split("").map(el => `<span>${el}</span>`).join(""); console.log(s); // <span>H</span><span>e</span><span>l</span><span>l</span><span>o</span>
В примере используется синтаксис ECMAScript 6, может не поддерживаться устаервшими браузерами.
[] и charAt
Из любой строки
можно взять отдельный символ. Это делается с помощью оператора [], в которых
указывается индекс нужного символа. Например:
let str = 'Hello!\nI\'m Javascript.'; let ch1 = str; let ch2 = str7; console.log(ch1, ch2); console.log(typeof ch1);
Обратите
внимание, что так как в JavaScript нет символьного типа, то
возвращаемое значение – это строка, состоящая из одного символа. Ту же самую
операцию выделения символа можно выполнить и с помощью метода charAt(pos), но он менее
удобен и существует, скорее по историческим причинам для совместимости со
старыми скриптами:
Ту же самую
операцию выделения символа можно выполнить и с помощью метода charAt(pos), но он менее
удобен и существует, скорее по историческим причинам для совместимости со
старыми скриптами:
let ch1 = str.charAt(); let ch2 = str.charAt(7);
Интересной особенностью
JavaScript является
возможность перебрать строку посимвольно с помощью цикла for of, используемого
для массивов:
for(let ch of "Hello") console.log(ch);
Обратите
внимание, что строки в JavaScript изменять нельзя. Например,
нельзя выполнить такую операцию:
str = "h";
получим ошибку
исполнения. Если нужно изменить строку, то создается новая измененная строка.
Округление
Одна из часто используемых операций при работе с числами – это округление.
В JavaScript есть несколько встроенных функций для работы с округлением:
- Округление в меньшую сторону: становится , а — .
- Округление в большую сторону: становится , а — .
- Округление до ближайшего целого: становится , — , а — .
- (не поддерживается в Internet Explorer)
- Производит удаление дробной части без округления: становится , а — .
Ниже представлена таблица с различиями между функциями округления:
Эти функции охватывают все возможные способы обработки десятичной части. Что если нам надо округлить число до количества цифр в дробной части?
Например, у нас есть и мы хотим округлить число до 2-х знаков после запятой, оставить только .
Есть два пути решения:
Умножить и разделить.
Например, чтобы округлить число до второго знака после запятой, мы можем умножить число на , вызвать функцию округления и разделить обратно.
Метод toFixed(n) округляет число до знаков после запятой и возвращает строковое представление результата.
Округляет значение до ближайшего числа, как в большую, так и в меньшую сторону, аналогично методу :
Обратите внимание, что результатом является строка. Если десятичная часть короче, чем необходима, будут добавлены нули в конец строки:
Мы можем преобразовать полученное значение в число, используя унарный оператор или , пример с унарным оператором: .
История чата
Чат как метод обмена мгновенными сообщениями появился в конце 80-х годов XX века. Сначала был разработан протокол IRC (аббревиатура переводится так: ретранслируемый интернет-разговор). Он позволял отправлять сообщения как группе пользователей, так и одному человеку. Следом появляются системы обмена мгновенными сообщениями – мессенджеры. Чат-культура способствовала активному применению специальных значков (смайлов) для придания тексту дополнительной эмоциональной окраски.
Во время общения применяются специальные смайлы для придания тексту дополнительной эмоциональной окраски
Пик популярности чатов пришелся на 90-е годы, общение с людьми, находящимися за много тысяч километров, привлекало пользователей – в отличие от телефонной связи чаты позволяли создавать целые сообщества по интересам или просто «интернет-болталки», в которых велись беседы на любые темы. Когда еще не было социальных сетей пользователи из России проводили много часов в интернет-клубах, общаясь в чатах: знакомились, обсуждали различные темы, искали работу и так далее.
До сих пор живы русскоязычные чаты:
- «Вулкан» – действует до сих пор. Есть несколько виртуальных комнат: общая, анекдоты, викторина, доска объявлений;
Интерфейс чата «Вулкан»
- «Кроватка» – общение и знакомства;
Интерфейс чата «Кроватка»
- «Чатвдвоем» – разговор со случайным собеседником;
Интерфейс сайта «Чатвдвоем»
- «OldChat30» – для тех, кому за 30 (есть возможность пользоваться без регистрации);
Главное окно чата «OldChat30»
- «Рулетка» – видео-чат для общения и знакомств.
Видео-чат для общения и знакомств «Рулетка»
Сейчас чатами интересуется все меньше людей. С появлением более удобных социальных сетей чаты потеряли большинство поклонников.
Но по-прежнему чаты встречаются:
- на коммерческих сайтах – используются чат-боты в виде всплывающих окон, где посетитель (потенциальный клиент) сможет задать вопрос в любое время суток. Если программа не сумеет найти ответ, то будет предложено оставить контактный телефон;
- в виде техподдержки – часто используют банковские организации, букмекеры, провайдеры. Здесь отвечать будут консультанты. В нерабочее время возможность контакта отсутствует;
- видео-чаты – основная масса связана с эротическими сайтами;
- телевизионные чаты – зритель отправляет сообщение, которое транслируется чаще всего в нижней строке телеканала (MTV, RU.TV и прочих).
Чаты сейчас менее популярны, но функционируют и имеют свою аудиторию
Администраторы обычных чатов также не сдаются, они завлекают пользователей различными дополнительными возможностями: разыгрываемыми викторинами с призами и подарками, возможностью использовать виртуальные деньги в пределах чата (магазины, распродажи), собственными виртуальными радиостанциями, разные игры.
Нюансы сравнения строк
Если мы
проверяем строки на равенство, то никаких особых проблем в JavaScript это не
вызывает, например:
if("abc" == "abc") console.log( "строки равны" ); if("abc" != "ABC") console.log( "строки не равны" );
Но, когда мы
используем знаки больше/меньше, то строки сравниваются в лексикографическом
порядке. То есть:
1. Если код
текущего символа одной строки больше кода текущего символа другой строки, то
первая строка больше второй (остальные символы не имеют значения), например:
console.log( "z" > "Za" ); //true
2. Если код
текущего символа одной строки меньше кода текущего символа другой строки, то
первая строка меньше второй:
console.log( "B" < "a" ); //true
3. При равенстве
символов больше та строка, которая содержит больше символов:
console.log( "abc" < "abcd" ); //true
4. В остальных
случаях строки равны:
console.log( "abc" == "abc" ); //true
Но в этом
алгоритме есть один нюанс. Например, вот такое сравнение:
console.log( "Америка" > "Japan" ); //true
Дает значение true, так как
русская буква A имеет больший
код, чем латинская буква J. В этом легко убедиться,
воспользовавшись методом
str.codePointAt(pos)
который
возвращает код символа, стоящего в позиции pos:
console.log( "А".codePointAt(), "J".codePointAt() );
Сморите, у буквы
А код равен 1040, а у буквы J – 74. Напомню,
что строки в JavaScript хранятся в
кодировке UTF-16. К чему
может привести такой результат сравнения? Например, при сортировке мы получим
на первом месте страну «Japan», а потом «Америка». Возможно, это не
то, что нам бы хотелось? И здесь на помощь приходит специальный метод для
корректного сравнения таких строк:
str.localeCompare(compareStr)
он возвращает
отрицательное число, если str < compareStr, положительное
при str > compareStr и 0 если строки
равны. Например:
console.log( "Америка".localeCompare("Japan") ); // -1
возвращает -1
как и должно быть с учетом языкового сравнения. У этого метода есть два
дополнительных аргумента, которые указаны в документации JavaScript. Первый
позволяет указать язык (по умолчанию берётся из окружения) — от него зависит
порядок букв. Второй позволяет определять дополнительные правила, например, чувствительность
к регистру.