2015-03-30 3 views
1

Я пытаюсь создать программу, которая сравнивает два разных значения (x, y) и определяет, будет ли первое больше, равно или меньше другого. В дополнение к этому он также обнаружит, введено ли значение NaN и выдается инструкция об ошибке. Код ниже ....Ошибка JavaScript Output и Control Flow при сравнении двух значений

function getRelationship(x, y) { 
    if (x > y) { 
     return ">"; 
    } 
    else if (x < y) { 
     return "<"; 
    } 
    else if (x == y) { 
     return "="; 
    } 
    else if (isNaN(x)) { 
     console.log("Can\'t compare relationships because " + x + " is not a number"); 
     return x; 
    } 
    else if (isNaN(y)) { 
     console.log("Can\'t compare relationships because " + y + " is not a number"); 
     return y; 
    } 
    else if (isNaN(x) && isNaN(y)) { 
     console.log("Can\'t compare relationships because " + x + " and " + y + " are not numbers"); 
     return x, y; 
    } 
} 

Когда я введите следующие вызовы функций:

console.log(getRelationship(1,4)); 
console.log(getRelationship(1,1)); 
console.log(getRelationship("that",2)); 
console.log(getRelationship("this"," something else")); 
console.log(getRelationship(3)); 
console.log(getRelationship("hi")); 
console.log(getRelationship(NaN)); 
console.log(getRelationship(NaN, undefined)); 

Я получаю обратно:

LOG: '<' 
LOG: '=' 
LOG: 'Can't compare relationships because that is not a number' 
LOG: 'that' 
LOG: '>' 
LOG: 'Can't compare relationships because undefined is not a number' 
LOG: undefined 
LOG: 'Can't compare relationships because hi is not a number' 
LOG: 'hi' 
LOG: 'Can't compare relationships because NaN is not a number' 
LOG: NaN 
LOG: 'Can't compare relationships because NaN is not a number' 
LOG: NaN 

Так что мои вопросы, как приходят на четвертый вызов функции в инструкции Else If с оператором && не используется; как происходит сравнение «этого» и «чего-то другого», и как я могу изменить это, чтобы использовать условное условие &&; и почему я получаю NaN, а некоторые другие строки, выведенные, когда все, что я хочу, являются предварительно закодированными выходами console.log()?

ответ

0

как прийти на вызов четвертой функции в Else Если оператор с оператором & & это не используется?

Потому что перед вами был проверен случай if (isNaN(x)).

Как вы сравниваете «это» и «что-то еще»?

Ну, они обе строки, почему бы их не сравнить?

и как я могу изменить, что

Я думаю, что вы хотите сравнить только цифры. В этом случае будьте откровенны в этом. Вы можете просто перевести оба операнда в числа (используя Number), но обратите внимание, что это будет работать и с числовыми строками. Если вы этого не хотите, выполните проверку на ваши операнды typeof.

И как получилось, что я получаю NaN и некоторые другие строки, выводимые, когда все, что я хочу, это предварительно закодированные выходы console.log()?

Потому что вы их return и их console.log ging результаты ваших звонков.

+0

Благодарим за отзыв. Теперь для первого вопроса мне нужно это сделать, если перед (isNaN (x))? Что касается последнего вопроса, то причиной, по которой я вернул их, было избежать получения «неопределенного» в качестве вывода. Любое предложение о том, как избежать как выходного журнала, так и вывода «undefined»? – JCD

+0

Не совсем, я бы рекомендовал просто игнорировать 'undefined'. Вы могли бы, конечно, «вернуть» свое «выходное сообщение», но для правильной обработки ошибок вам лучше «бросить» их. – Bergi