#javascript
#javascript
Вопрос:
Попытка вывести, как введенное пользователем число сравнивается с числом 117, очень простая, но я почему-то делаю что-то не так?
let output = "";
//
//input Number here
let userNumber = 117;
function calcUserNumberFunc(indvNumber) {
switch (indvNumber) {
case userNumber === 117:
return `the number ${userNumber} is equal to 117.`;
case userNumber > 117:
return `the number ${userNumber} is greater than 117.`;
case userNumber < 117:
return `the number ${userNumber} is less than 117.`;
default:
return `Invalid, or not whole number.`;
}
}
output = calcUserNumberFunc();
document.getElementById("app").innerHTML = output;
Комментарии:
1.
calcUserNumberFunc
принимает параметр, который вы затем тестируете, но вы не передаете ему никаких параметров. Вам также нужно иметьcase
те , с которыми вам нужно сравнивать , напримерcase 117
— лучшеswitch
полностью отказаться от них и использоватьif
вместо них2. Вы не должны использовать операторы switch, используйте if
3. Вы можете заставить switch работать с
switch (true) {
, но это не лучшая практика.
Ответ №1:
Хотя ваш код синтаксически корректен (т. Е. не выдает никаких ошибок), вы используете не [switch][1]
так, как это задумано.
switch (expression) { ... }
вычисляет expression
и сопоставляет его значения со значением, которое вы указываете в случаях. В вашем коде вы ничего не делаете с этим параметром.
Что на самом деле происходит, так это то, что вы сравниваете indvNumber
с результатами ваших сравнений (например, userNumber === 117), и поскольку все они являются bools ( true
или false
), вы в основном сравниваете indvNumber
с true или false.
Тем не менее. Для вашего варианта использования вы на самом деле используете [IFs][2]
инструкции для сравнения всех ваших случаев.
Кроме того, когда вы вызываете функцию, calcUserNumberFunc()
вы не передаете никаких параметров, поэтому значение indvNumber не определено, что равно false (как и [falsy value][3]), поэтому в вашем коде вы всегда будете получать the number ${userNumber} is greater than 117.
;. userNumber > 117
имеет значение false и сравнивается с indvNumber
, которое не определено.
Ответ №2:
Вы можете преобразовать свой код в это, и это поможет сделать функцию более повторно используемой.
//input Number here
let inputNumber = 117
// Assuming userNumber is the input Number and indvNumber is the number to be compare
function calcUserNumberFunc(userNumber, indvNumber = 117) {
if (userNumber === indvNumber) {
return `the number ${userNumber} is equal to ${indvNumber}.`;
}
if (userNumber > indvNumber) {
return `the number ${userNumber} is greater than ${indvNumber}.`;
}
if (userNumber < indvNumber) {
return `the number ${userNumber} is less than ${indvNumber}.`;
}
return `Invalid, or not whole number.`;
}
document.getElementById("app").innerHTML = calcUserNumberFun(inputNumber);
Теперь вы можете передавать номер ввода напрямую в качестве параметра userNumber
Например: calcUserNumberFunc(116)
и он вернется the number 116 is less than 117.
.
Вы также можете перезаписать 117 на другое число, если вам когда-нибудь понадобится его изменить, например, сравнивая пользовательский ввод с 120 вместо этого.
Например: calcUserNumberFunc(120, 120)
. Это должно вернуть the number 120 is equal to 120.