Сканировали NaN и терялись

Я определяю функцию, которая принимает в качестве аргументов три числа и возвращает наибольшее из них.

Вот мой код:

var instructions = alert("Choose a set of numbers to input for the computer to determine which value is the largest");

var inputOne = prompt("Please input your first desired value");
var inputTwo = prompt("Please input your second desired value");

// THIS ARRAY STORES THE VALUES OF inputOne && inputTwo
var maxInput = Math.max([inputOne, inputTwo]);

var inputThree = prompt("Please input your third desired value");

// THIS WILL COMPARE BETWEEN THE inputThree && THE MAX INPUT OF THE USERS FIRST TWO CHOICES
var maxNumber = Math.max(maxInput, inputThree);


//validate if inputs are numbers and not letters
// isNaN()

    var compare = function (maxNumber, inputThree) {

    if (inputThree === maxNumber) {
        return alert("The result is the same!");

    } else if (inputThree != maxNumber) {
                return alert(maxNumber + " " + "is the larger value!");

    }
}
compare(maxNumber, inputThree); 

Теперь я получаю результат «NaN — большее значение!» и это сводит меня с ума! Я попытался запустить console.log, чтобы увидеть, откуда я получаю NaN, но это вообще не сработало. Все, что я сделал, это вывел NaN на консоль.

Я также пытался взять параметры из Math.max(), но только что получил: "-infinity - большее значение!"

Может кто-нибудь хотя бы подсказать, почему это происходит? Или объясните мне дальше, что происходит.


person illywilly    schedule 12.06.2014    source источник
comment
Math.max() не принимает массив в качестве аргумента. Сравните Math.max([1, 2]) с Math.max(1, 2).   -  person univerio    schedule 13.06.2014
comment
Кроме того, в else if в функции compare используйте !== вместо !=, чтобы принудительно использовать числовые значения.   -  person Roberto Linares    schedule 13.06.2014


Ответы (2)


Math.max([inputOne, inputTwo]) должно быть Math.max(inputOne, inputTwo)

Почему бы вам просто не получить самый большой из них всего лишь

var maxNumber = Math.Max(inputOne, inputTwo, inputThree);
person Barmar    schedule 12.06.2014
comment
Ого, конечно, я пытался сделать это раньше, но не знаю, что я делал. Теперь, когда я смотрю на это сегодня, все это имеет смысл. Я определенно делал это более сложным, чем нужно, можете ли вы сказать, что я новичок в этом? Ха-ха, в любом случае большое спасибо, Бармар!! - person illywilly; 13.06.2014

Здесь:

var inputThree = prompt("Please input your third desired value");

inputThree — это строка (т. е. ее значение имеет тип Строка), всегда. И здесь:

var maxNumber = Math.max(maxInput, inputThree);

maxNumber – это число, всегда (потому что это то, что Math.max возвращает значение, даже если аргументы являются строками). Так:

inputThree === maxNumber

всегда ложно, поскольку Число никогда не равно Строке (см. Алгоритм сравнения строгого равенства). Поэтому либо преобразуйте inputThree в число, например.

+inputThree === maxNumber

или используйте ==.

inputThree == maxNumber
person RobG    schedule 12.06.2014