Эта статья представляет собой расшифровку моей бесплатной серии YouTube об основах веб-разработки. Если вы предпочитаете смотреть, а не читать, посетите мой канал Dev Newbs.

Здравствуйте, мои коллеги-разработчики! Мы вступаем на территорию странных методов, которые почти никто не использует, но каким-то образом нам нужно охватить их, чтобы дополнить их всеми методами объекта String. Итак, вот один из этих методов. Вот!

Метод toLocaleLowerCase() возвращает значение строки вызова, преобразованное в нижний регистр, в соответствии с любым сопоставлением регистра, зависящим от локали.

Как правило, этот метод возвращает тот же результат, что и метод toLowerCase(). Однако для некоторых локалей, где возникает языковой конфликт с обычным сопоставлением регистра Unicode (например, турецкий), результаты могут отличаться.

Параметр локали указывает локаль, которая будет использоваться для преобразования в нижний регистр в соответствии с любыми сопоставлениями регистра, специфичными для локали. Если в массиве указано несколько локалей, используется наилучшая доступная локаль.

Если вы не укажете локаль в качестве первого параметра, он преобразует строку в строчные буквы в соответствии с текущей локалью хоста.

const str = "İstanbul";
// get default locale for my browser
"My default locale: '" + navigator.language + "'"
// OUTPUT: My default locale: 'sk-SK'
// my default (slovak) browser's locale
str.toLocaleLowerCase()                      // i̇stanbul
// english US locale
str.toLocaleLowerCase('en-US')               // i̇stanbul
// Turkish locale
str.toLocaleLowerCase('tr')                  // istanbul
// compare the values of lowercase results with different locales
str.toLocaleLowerCase('en-US') === str.toLocaleLowerCase()
// OUTPUT: true
str.toLocaleLowerCase() === str.toLocaleLowerCase('tr')
// OUTPUT: false
str.toLocaleLowerCase('tr') === str.toLocaleLowerCase('en-US')
// OUTPUT: false

Когда мы выводим результаты преобразования в нижний регистр, мы получаем такое же визуальное представление строки. Однако, когда мы сравниваем результаты друг с другом, мы обнаруживаем, что турецкая версия не равна двум другим. Однако они равны друг другу.

Также есть возможность получить исключение в результате конвертации. Если быть точным, мы можем получить два разных типа исключений.

Во-первых, это RangeError, который выдается, когда параметр локали недействителен. Во-вторых, TypeError, если элемент в массиве локалей не имеет строкового типа. Давайте посмотрим на них в действии в примере 2.

let locales = ['tr-TR', 2];
try {
    // RangeError
    console.log(str.toLocaleLowerCase('engl'));
} catch (err){
    console.log(err);
}
// OUTPUT:
// RangeError: Incorrect locale information provided
// at String.toLocaleLowerCase (<anonymous>)
console.log("---");
try {
    // TypeError
    console.log(str.toLocaleLowerCase([2, 'en-US']));
} catch (err){
    console.log(err);
}
// OUTPUT: 
// TypeError: Language ID should be string or object.
// at String.toLocaleLowerCase (<anonymous>)

Мы получаем RangeError, потому что предоставленная строка «engl» не представляет какой-либо допустимой локали. Точно так же мы получаем TypeError, потому что номер 2 не входит в число разрешенных типов ввода в массиве локалей.

И это все. Я сделал этот эпизод коротким и приятным, потому что нам еще нужно рассказать о трех других связанных методах. Если вы хотите знать, какие из них я имею в виду, ждите следующего эпизода.

Как обычно, спасибо за внимание. Скоро увидимся в следующем эпизоде.