Тип параметров функции

Я работаю над базовой игрой «камень-ножницы-бумага» в codecademy. Я не понимаю один шаг.

const getUserChoice = function (userInput) {
console.info(userInput)
userInput = userInput.toLowerCase();
if ((userInput === 'paper') || userInput === 'scissors' || userInput === 'rock') {
    return userInput;
} else {
    console.info('Wrong user input')
}

}

Почему, когда я ставлю в качестве аргумента что-то еще, строка не работает?

Он отлично работает с getUserChoice('AAA'), но не работает с getUserChoice (aa). Может кто-нибудь объяснить это мне, пожалуйста?

isnt working with getUserChoice (aa) Вы звоните getUserChoice с переменной aa. Что содержит переменная с именем aa?
CertainPerformance 04.03.2019 05:54
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
1
67
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Он отлично работает с getUserChoice('AAA'), но не работает с getUserChoice (aa).
'AAA' — это string, завернутый внутрь ''. aa относится к переменной с именем aa.
Если aa не определено, будет выдана ошибка.

Uncaught ReferenceError: aa is not defined

Если aa имеет значение, но не string, он все равно выдаст ошибку, потому что вы вызываете строковый метод toLowerCase() в своей функции.

"Uncaught TypeError: userInput.toLowerCase is not a function"

Чтобы исправить это, преобразуйте userInput в string перед вызовом toLowerCase. Использовать String() для изменения типа.

let aa = 3;
const getUserChoice = function (userInput) {
  userInput = String(userInput).toLowerCase();
  if ((userInput === 'paper') || userInput === 'scissors' ||      userInput === 'rock') {
      console.info("correct");
     return userInput;
  } else {
    console.info('Wrong user input')
  }
}
getUserChoice(aa)
getUserChoice(function(){console.info('sss')})
getUserChoice(55232.3323)
getUserChoice(undefined)
getUserChoice(true)
getUserChoice('paper');

Причина в том, что aa является переменной, но если вы присвоите ей строку, она будет работать.

Также не использование toLowerCase(). Он будет работать со строкой, но если вы присвоите число aa, например let aa = 1, это не сработает. Не здесь 1 назначается как число, а не строка, где aa='1' будет строкой

let aa = 'AAA'

const getUserChoice = function(userInput) {
  console.info(userInput)
  userInput = userInput.toLowerCase();
  if ((userInput === 'paper') || userInput === 'scissors' || userInput === 'rock') {
    return userInput;
  } else {
    console.info('Wrong user input')
  }
}


getUserChoice(aa)
Ответ принят как подходящий

Когда вы пытаетесь запустить getUserChoice ('AAA'), вы пытаетесь передать 'AAA' функции. 'AAA' — это строка (символы, начинающиеся и заканчивающиеся одинарными кавычками), поэтому функция работает.

Когда вы пытаетесь запустить getUserChoice (aa), вы пытаетесь передать aa функции. В этом случае aa не начинается и не заканчивается на ', поэтому это не строка. В таком случае JavaScript предполагает, что aa является переменной. Теперь, если переменная aa не определена, вы получите сообщение об ошибке.

Если вы запустите var aa = 'some string';, а затем запустите getUserChoice (aa), это не вызовет ошибки.

Короче говоря, ваша переменная aa не определена, поэтому вы получаете ошибку.

Другие вопросы по теме