Мой код продолжает возвращать неопределенное значение под выводом

#javascript #function

#javascript #функция

Вопрос:

Моя функция JavaScript продолжает возвращать undefined под правильным выходным значением.

 let grade;

function getGrade(score) {
    // Write your code here
    if (score >= 25 amp;amp; score <= 30) {
        console.log('A');
    }
    else if (score >= 20 amp;amp; score <= 25) {
        console.log('B');
    }
    else if (score >= 15 amp;amp; score <= 20) {
        console.log('C');
    }
    else if (score >= 10 amp;amp; score <= 15) {
        console.log('D');
    }
    else if (score >= 5 amp;amp; score <= 10) {
        console.log('E');
    }
    else {
        console.log('F');
    }
    return grade;
}
  

Комментарии:

1. Какой ожидаемый вывод и что такое ввод?

2. это потому, что вы не определили, что grade такое. Вы можете установить это в своих операторах if, затем return

3. вы возвращаетесь grade , но где вы его объявляете и заполняете?

4. даже после объявления let grade; снаружи, что вы с этим делаете.. почему он не должен возвращать undefined?

5. OP действительно объявлял grade , но он был опущен из блока кода, потому что в разметке отсутствовал символ новой строки после трех «.

Ответ №1:

Вы не определили свой grade . И так будет всегда undefined .

Один из способов сделать это заключается в следующем:

 function getGrade(score) {
    var grade = "";
    // Write your code here
    if (score >= 25 amp;amp; score <= 30) {
        grade = "A";
    }
    else if (score >= 20 amp;amp; score <= 25) {
        grade = "B";
    }
    else if (score >= 15 amp;amp; score <= 20) {
        grade = "C";
    }
    else if (score >= 10 amp;amp; score <= 15) {
        grade = "D";
    }
    else if (score >= 5 amp;amp; score <= 10) {
        grade = "E";
    }
    else {
        grade = "F";
    }
    return grade;
}

console.log(getGrade(27))  

Ответ №2:

Кажется, что у вас есть return grade; внизу, но grade , похоже, нигде не определено.

Ответ №3:

Вам следует установить значение вашей переменной «grade» или просто удалить

 return grade;
  

Ответ №4:

Всегда проверяйте консоль. В данный момент он поет вам, сообщая, что grade не определено.

Вы пытаетесь вернуть что-то, чему вы не присвоили значение.

 function getGrade(score) {
    // ... //
    return grade; //<-- nowhere do you define grade
}
  

Должно быть

 function getGrade(score) {
    let grade;
    if (score >= 25 amp;amp; score <= 30) grade = 'A';
    else if (score >= 20 amp;amp; score <= 25) grade = 'B';
    else if (score >= 15 amp;amp; score <= 20) grade = 'C';
    else if (score >= 10 amp;amp; score <= 15) grade = 'D';
    else if (score >= 5 amp;amp; score <= 10) grade = 'E';
    else grade = 'F';
    console.log(grade);
    return grade;
}
  

Комментарии:

1. Большое спасибо, сэр, теперь я понял.

2. Пожалуйста. Пожалуйста, примите один из ответов, если вы считаете его правильным.

Ответ №5:

Используйте return вместо console.log()

 function getGrade(score) {
    if (score >= 25 amp;amp; score <= 30) {
        return 'A'
    }
    else if (score >= 20 amp;amp; score <= 25) {
        return 'B'
    }
    else if (score >= 15 amp;amp; score <= 20) {
        return 'C';
    }
    else if (score >= 10 amp;amp; score <= 15) {
        return 'D';
    }
    else if (score >= 5 amp;amp; score <= 10) {
        return 'E';
    }
    else {
        return 'F';
    }
}
console.log(getGrade(20))  

Поскольку существует разница в 5 ч / б каждом диапазоне оценок, поэтому вы можете использовать разделение и Math.floor

 function getGrade(score) {
    let grades = 'FEDCBA' 
    return score === 30 ? 'A' : grades[Math.floor((score)/5)]    
}
console.log(getGrade(20))
console.log(getGrade(19))
console.log(getGrade(30))