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

Здравствуйте и добро пожаловать во вторую статью из серии "Основы Javascript" о строках. Сегодня мы говорим об одном из немногих доступных свойств объекта String - «длина».

Свойство length возвращает длину строки (количество символов).

let sentence = "Hello newbs!";
// returns "Number of characters in the sentence is: 12"

Хорошо, достаточно просто. Вы спросите, а что насчет пустых строк? Ну что ж, посмотрим. Длина пустой строки будет равна 0.

let sentence = "";
// returns "Number of characters in the sentence is: 0"

Все очень просто. Думаю, мы на этом закончили ... как насчет того, чтобы дать вам большой палец вверх за дорогу?

let thumbsUp = "👍";         // outputs 2

Ладно, это странно ... давайте попробуем другого персонажа:

let unknownCharacter= "你";  // outputs 2

Что здесь происходит? Почему говорится, что один символ имеет длину 2 символа? Проблема в том, что длина фактически не возвращает количество символов в строке, а скорее возвращает количество единиц кода в строке.

Javascript использует UTF-16 в качестве строкового формата, что означает, что каждый символ кодируется как 16-битное двоичное число. Или кодовый блок, если хотите.

Но в набор символов UTF-16 может поместиться не так много символов. Если быть точным, теоретически он может содержать максимум 2 в степени 16, что составляет 65536 символов. Может показаться, что это много, но вы должны понимать, что мы не используем только латинский алфавит и цифры. В разных языках разные буквы и знаки препинания, даже некоторые лишние буквы в алфавите. И есть еще много других алфавитов, например греческий, арабский, китайский алфавит, азбука и многие другие. Вдруг 65 тысяч - это не много, не правда ли?

Хотя очень маловероятно, что вы столкнетесь с этой проблемой в реальной жизни, хорошо об этом знать. И чтобы вы не потеряли из-за этого спокойный ночной сон, я покажу вам не одно, а два разных решения проблемы, если вы столкнетесь с ней в будущем.

Первый вариант - преобразовать строку в массив, используя нотацию «три точки». Позвольте мне показать вам очень быстро:

let thumbsUpIcon = "👍";
thumbsUpIcon.length                         // 2
let stringToArray = [...thumbsUpIcon];
stringToArray.length                        // 1

Причина, по которой это работает, заключается в том, что итератор, применяемый к преобразованному массиву, выполняет итерацию по символам, а не по единицам кода. Следовательно, он считает то, что мы действительно хотим подсчитать.

Другой вариант - использовать один из методов объекта String под названием match (). Я не буду вдаваться в подробности, потому что этот метод получит собственное видео. Просто имейте в виду, это может быть полезно и в этой ситуации.

thumbsUpIcon.match(/./gu).length;          // 1 as well

Хорошо, это была длина свойства String. Надеюсь, вы узнали что-то новое сегодня. Я действительно многому научился, исследуя эту тему.

Спасибо за ваше время, увидимся в следующей статье.