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

Здравствуйте и добро пожаловать в следующую статью из серии "Основы Javascript" о строках. Сегодня мы рассмотрим первый из методов объекта String. Мы собираемся рассмотреть все методы в алфавитном порядке. Итак, первым по порядку является charAt. Давай перейдем к делу.

Метод charAt () возвращает символ по указанному индексу в строке. Индекс или позиция первого символа, если хотите, равен 0, индекс второго символа равен 1 и так далее. Последний символ имеет индекс, равный длине строки минус один.

let FivecharactersLongString= "Hello";
FivecharactersLongString.charAt(0)   // H
FivecharactersLongString.charAt(1)   // e
FivecharactersLongString.charAt(2)   // l
FivecharactersLongString.charAt(3)   // l
FivecharactersLongString.charAt(4)   // o

В редких случаях метод charAt () возвращает пустую строку. Один из них - если вы укажете отрицательное значение в качестве индекса. Другой - если вы укажете положительное значение, которое больше или равно фактической длине строки.

// valid range is from 0 to 4
FivecharactersLongString.charAt(-1)  // empty string
FivecharactersLongString.charAt(5)   // empty string

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

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

FivecharactersLongString.charAt("H")   // H
FivecharactersLongString.charAt(NaN)   // H

Важно отметить, что возвращаемое значение представляет собой новое строковое примитивное значение, состоящее из единственной единицы кода UTF-16. Что это обозначает? Мы уже упоминали, что некоторые символы состоят из более чем одной кодовой единицы.

Что ж, если символ в указанном индексе состоит из более чем одной кодовой единицы, вы не получите фактический символ, а только его часть - в частности, значение кодовой единицы в данной позиции.

let thumbsUpIcon = "👍";
thumbsUpIcon.length         // 2
thumbsUpIcon.charAt(0)      // "\ud83d"
thumbsUpIcon.charAt(1)      // "\udc4d"
[...thumbsUpIcon][0]        // "👍"

Это, очевидно, проблема для нас. К счастью, мы уже решили это в предыдущей статье о длине свойства объекта String. Если вы не видели статью, прочтите ее. Короче говоря, нам нужно преобразовать наше строковое значение в массив, используя синтаксис распространения. Затем мы можем использовать обозначение квадратных скобок с исходным индексом, как если бы мы использовали метод charAt ().

Но это подводит нас к вопросу, зачем использовать метод charAt (), если в некоторых крайних случаях он терпит неудачу? В прошлом - лет десять назад или около того, квадратное обозначение не было реализовано во всех основных браузерах (привет Internet Explorer), поэтому у вас действительно не было выбора. Если вам нужно, чтобы ваш код работал повсеместно, вам нужно было использовать метод объекта String. К счастью, те старые времена давно прошли, и нет реальной причины не использовать везде квадратные скобки. Таким образом, вы относитесь к строке как к объекту, подобному массиву, и все будет хорошо и красиво.

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

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

Ладно, хватит разговоров. Давайте посмотрим на реальные различия в действии.

'hello'[NaN]                  // undefined
'hello'.charAt(NaN)           // 'h'
'hello'[true]                 // undefined
'hello'.charAt(true)          // 'e'

Результирующее значение для этих крайних случаев различается при использовании метода charAt () и квадратных скобок. Причина в том, как они определены и реализованы. По умолчанию charAt () возвращает первый символ строки, если не задано правильное значение индекса. С другой стороны, поведение по умолчанию для доступа к индексам, не инициализированным в массиве, - это возврат undefined. Просто потому, что значение данного индекса действительно еще не было определено.

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

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