Принудительное возвращение JavaScript для сохранения через функции - PullRequest
2 голосов
/ 24 сентября 2011

Спасибо, что нашли время, чтобы рассмотреть этот вопрос. Я пытался решить проблему в течение одного или двух часов безуспешно ...

У меня есть веб-страница, которая устанавливает переменную JavaScript на основе ответа от функции:

grade = getScore(questionAnswer, userAnswer, questionType);

(userAnswer - ответ пользователя на вопрос, полученный из текстовой области)

Вот getScore:

function getScore(questionAnswer, userAnswer, questionType) {

    switch(questionType) {
        case 'multiplechoice':
            return scoreMC(questionAnswer, userAnswer);
        break;

        case 'usertypesanswer':
            return scoreTA(questionAnswer, userAnswer);         
        break;

        default:
            return 0
    }   

}

Функции для ScoreMC и ScoreTA были тщательно протестированы и отлично работают. Проблема заключается в том, что если ответ пользователя не отформатирован правильно, ScoreMC или ScoreTA вернет false. В противном случае он возвращает значения оценки и сообщения. Однако вместо получения значения «false» для «grade», когда я устанавливаю значение переменной grade на основе функции getScore, я получаю «undefined». (У нас нет проблем при правильной проверке ответа пользователя.)

После установки «оценки» я попытался проверить, не определена ли какая-либо его часть:

if(typeof(grade.score) !== undefined)

Я не понимаю, почему, но даже когда я вижу "undefined" в моей консоли Firebug, grade.score проходит эту проверку ...

Кто-нибудь видит, что я делаю неправильно? Большое спасибо за вашу помощь. Мне нужно многое узнать о JavaScript.

Ответы [ 2 ]

3 голосов
/ 24 сентября 2011
if(typeof(grade.score) !== undefined)

может быть

if(grade.score && grade.score !== false) // if I understand your question 

или

if(typeof(grade.score) !== "undefined")

typeof возвращает строку

0 голосов
/ 24 сентября 2011

Если оператор return не используется (или пустой возврат без значения), JavaScript возвращает undefined.

Почти наверняка одна из ваших функций оценки (ScoreMC, ScoreTA, чей код вы должны были включить в вопрос) не возвращает значение, т. Е.

return;

Или просто достигает конца блока функционального кода без возврата.

...