Что означает ошибка: TypeError: toUpperCase is not a function
easy

Что означает ошибка: TypeError: toUpperCase is not a function

Функция есть, но она не знает, что ей делать

Ситуация: нам нужно приветствовать пользователя фразой из прописных букв, если он ввёл своё имя в верхнем регистре. Например, если пользователь представился как «МИША», то система должна приветствовать его фразой: «ПРИВЕТ, МИША!». А если пользователь ввёл имя как обычно, то и приветствуем его как обычно.

Чтобы перевести строку в верхний регистр, когда все буквы становятся большими, в JavaScript используется функция toUpperCase(). Всё просто и понятно, поэтому сразу пишем такой скрипт:

// объявляем переменную
var hello = "Привет, ";

// объявляем функцию приветствия с параметром имени
function greet(name) {

  // проверяем, имя написано большими буквами или нет 
  if (name == name.toUpperCase()) {
    // если регистр верхний, приветствуем пользователя всеми прописными буквами
    console.log(hello.toUpperCase() + name.toUpperCase());
  // если имя написано иначе
  } else {
    // то приветствуем пользователя как обычно
    console.log(hello + name);
  }
}

// объявляем переменную со значением массива имён
var names = [];
// добавляем имя в массив, чтобы запомнить очередного пользователя
names.push(prompt('Как вас зовут?'));
// вызываем функцию приветствия
greet(names);

Но при запуске скрипта мы получаем ошибку:

❌ TypeError: toUpperCase is not a function

Что это значит: функция toUpperCase(), несмотря на то что она точно есть в JavaScript, почему-то перестала работать и делать то, что нам нужно. Теперь JavaScript считает, что такой функции нет, и выдаёт ошибку.

Когда встречается: когда мы пытаемся перевести в верхний регистр значение, которое не является строкой. В нашем случае мы пытаемся перевести в верхний регистр массив, а не строку, а с массивами toUpperCase() работать не умеет.

Что делать с ошибкой TypeError: toUpperCase is not a function

Так как функция toUpperCase() может работать только со строками, то для исправления этой ошибки нам нужно передать в функцию именно строку. В нашем примере мы передаём строки, но в массиве, а это неправильный синтаксис. 

Самый очевидный способ — взять нужный элемент массива и передать его в качестве аргумента. Для этого поправим последнюю строку вызова функции greet():

// вызываем функцию приветствия и отдаём ей последний добавленный элемент
greet(names[names.length - 1]);

Теперь всё работает как нужно:

  • мы запрашиваем имя пользователя;
  • добавляем его в массив с зарегистрировавшимися пользователями;
  • берём последний элемент массива — самое свежее имя — и отправляем его в функцию приветствия;
  • внутри этой функции toUpperCase() теперь работает как нужно: переводит строку в верхний регистр.

// объявляем переменную
var hello = "Привет, ";

// объявляем функцию приветствия с параметром имени
function greet(name) {

  // проверяем, имя написано большими буквами или нет 
  if (name == name.toUpperCase()) {
    // если регистр верхний, приветствуем пользователя всеми прописными буквами
    console.log(hello.toUpperCase() + name.toUpperCase());
  // если имя написано иначе
  } else {
    // то приветствуем пользователя как обычно
    console.log(hello + name);
  }
}

// объявляем переменную со значением массива имён
var names = [];
// добавляем имя в массив, чтобы запомнить очередного пользователя
names.push(prompt('Как вас зовут?'));
// вызываем функцию приветствия и отдаём ей последний добавленный элемент
greet(names[names.length - 1]);

Обложка:

Алексей Сухов

Корректор:

Ирина Михеева

Вёрстка:

Мария Дронова

Соцсети:

Юлия Зубарева

Получите ИТ-профессию
В «Яндекс Практикуме» можно стать разработчиком, тестировщиком, аналитиком и менеджером цифровых продуктов. Первая часть обучения всегда бесплатная, чтобы попробовать и найти то, что вам по душе. Дальше — программы трудоустройства.
Получите ИТ-профессию Получите ИТ-профессию Получите ИТ-профессию Получите ИТ-профессию
Вам может быть интересно
easy