Эта статья представляет собой стенограмму моей бесплатной серии 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. Надеюсь, вы узнали что-то новое сегодня. Я действительно многому научился, исследуя эту тему.
Спасибо за ваше время, увидимся в следующей статье.