Avatar ·

Как сделать первую букву строки заглавной в JavaScript? (без jQuery)

Всем привет! Я только начал изучать JavaScript и столкнулся с такой задачей: нужно преобразовать строку так, чтобы первая буква стала заглавной, а остальные остались как есть. Например, у меня есть строка "hello world", и я хочу получить "Hello world". Я перепробовал несколько способов, но ничего не работает правильно. Пытался использовать charAt() и toUpperCase(), но у меня получается только одна заглавная буква, а остальная строка теряется. Вот что я пробовал: ```javascript let str = "hello world"; let firstChar = str.charAt(0).toUpperCase(); console.log(firstChar); // Выводит только "H" ``` Как мне получить полную строку с первой заглавной буквой? Нужно ли использовать цикл или есть более простой способ? Я читал, что можно сделать это с помощью slice() или substring(), но не до конца понимаю, как их применить. Также интересует: что делать, если строка пустая или состоит из одного символа? И как быть с русскими буквами? Заранее спасибо за помощь! P.S. Знаю, что в jQuery есть функция, но я хочу чистый JavaScript, без сторонних библиотек. <<>>

Правильное решение: комбинация charAt/toUpperCase и slice

Ваша проблема решается очень просто — нужно взять первый символ, сделать его заглавным, а затем добавить к нему остальную часть строки. Для этого отлично подходит метод slice().

Вот самый распространённый и надёжный способ:

function capitalizeFirstLetter(str) {
    if (!str) return str; // Защита от пустой строки
    return str.charAt(0).toUpperCase() + str.slice(1);
}

// Примеры использования:
console.log(capitalizeFirstLetter("hello world")); // "Hello world"
console.log(capitalizeFirstLetter("javaScript"));  // "JavaScript"
console.log(capitalizeFirstLetter(""));            // ""
console.log(capitalizeFirstLetter("a"));           // "A"

Как это работает

  • str.charAt(0) — получает первый символ строки (аналог str[0], но безопаснее для старых браузеров)
  • .toUpperCase() — преобразует этот символ в верхний регистр
  • str.slice(1) — возвращает часть строки, начиная с индекса 1 (то есть всё, кроме первого символа)
  • Оператор + — объединяет заглавную букву с остальной строкой

Почему это лучший способ?

  • Простота и читаемость — код понятен даже новичку
  • Надёжность — работает с пустыми строками и строками из одного символа
  • Поддержка Unicode — корректно работает с кириллицей, латиницей и другими алфавитами
  • Производительность — не создаёт лишних массивов или циклов

Альтернатива с квадратными скобками

В современном JavaScript (ES5+) можно использовать синтаксис с квадратными скобками вместо charAt():

const capitalizeFirstLetter = (str) => 
    str ? str[0].toUpperCase() + str.slice(1) : '';

Важные нюансы

1. Пустая строка. Если строка пустая, str[0] вернёт undefined, и вызов toUpperCase() вызовет ошибку. Поэтому всегда проверяйте наличие строки.

2. Строки с пробелами в начале. Если строка начинается с пробела, этот метод сделает заглавным пробел, что не имеет смысла. Для таких случаев сначала используйте trim():

function capitalizeTrimmed(str) {
    return str.trim() ? str.trim()[0].toUpperCase() + str.trim().slice(1) : '';
}

3. Многоязычные строки. Метод toUpperCase() корректно работает с Unicode, включая русские буквы. Например:

console.log(capitalizeFirstLetter("привет мир")); // "Привет мир"
console.log(capitalizeFirstLetter("über cool"));  // "Über cool"

Что делать, если нужно сделать заглавной каждую букву?

Если ваша задача — сделать заглавной первую букву каждого слова (Title Case), используйте комбинацию с split() и map():

function titleCase(str) {
    return str.split(' ').map(word => 
        word ? word[0].toUpperCase() + word.slice(1) : ''
    ).join(' ');
}

console.log(titleCase("hello world")); // "Hello World"

Этот подход разбивает строку на массив слов, преобразует каждое слово и собирает обратно в строку.

<<>>

Более безопасный подход с регулярными выражениями

Альтернативный способ — использовать метод replace() с регулярным выражением. Этот подход особенно полезен, когда нужно обработать строки с нестандартными символами или когда требуется дополнительная логика (например, игнорировать цифры в начале):

function capitalizeRegex(str) {
    return str.replace(/^./, char => char.toUpperCase());
}

console.log(capitalizeRegex("hello"));     // "Hello"
console.log(capitalizeRegex("123abc"));    // "123abc" (не меняет, т.к. первый символ — цифра)
console.log(capitalizeRegex(""));          // "" (пустая строка)

Как это работает

  • /^./ — регулярное выражение, которое находит первый символ (^ — начало строки, . — любой символ)
  • replace() заменяет найденный символ на результат вызова функции char => char.toUpperCase()
  • Если строка пустая, replace() ничего не делает и возвращает пустую строку

Когда использовать этот способ

  • Если вы уже работаете с регулярными выражениями в коде и хотите сохранить единый стиль
  • Когда нужно добавить дополнительную логику (например, пропускать цифры или специальные символы)
  • Если вы хотите избежать проверки на пустую строку — replace() безопасен для пустых строк

Недостаток: Регулярные выражения немного медленнее простого charAt + slice, но для большинства задач эта разница незаметна. Кроме того, регулярки могут быть менее читаемы для новичков.

Совет: Для простых задач используйте первый способ (с slice), а для более сложной обработки строк — регулярные выражения.