Javascript parseInt错误

时间:2013-06-29 05:16:08

标签: javascript

制作程序以显示学生成绩表。教师根据分配的数量从提示中输入成绩(g <=分配;在循环中)。所以我正在制作它以便将成绩平均在一起并显示一个字母等级。现在,我收到一个错误,“得分未定义”。不知道为什么。 JSFiddle说这完全有效,我不知道出了什么问题。

更新 谢谢大家,var得分= 0;修复它...但是我的循环现在只运行一次,即使我指定它循环5次。

这是我的事:http://jsfiddle.net/ndSMa/

// second table row begin
    var rowtwo = document.createElement("tr");
    var student = document.createElement("td");
    var studentprompt = prompt("What is the student's name?");
    var studenttext = document.createTextNode(studentprompt);
    student.appendChild(studenttext);
    rowtwo.appendChild(student);




    for (var g = 1; g <= assignments; g++) {
        while (!grade) {
            var grade = prompt("Please enter the student score for assignment" + g + ".");
            var gradecolumn = document.createElement("td");
            var gradetext = document.createTextNode(grade);
            gradecolumn.appendChild(gradetext);
            rowtwo.appendChild(gradecolumn);
            if (parseInt(grade, 10)) {
                // accumulate score
                score += parseInt(grade, 10);
                var totalscore = score/assignments;

            }
            // grade is not a number
            else grade = undefined;
        }



        if (score >= 94) {
            var acolumn = document.createElement("td");
            var atext = document.createTextNode("A");
            totalcolumn.appendChild(atext);
            rowtwo.appendChild(acolumn);
        } else if (score >= 90) {
            var aminuscolumn = document.createElement("td");
            var aminustext = document.createTextNode("A-");
            totalcolumn.appendChild(aminustext);
            rowtwo.appendChild(aminuscolumn);
        } else if (score >= 87) {
            var bpluscolumn = document.createElement("td");
            var bplustext = document.createTextNode("B+");
            totalcolumn.appendChild(bplustext);
            rowtwo.appendChild(bpluscolumn);
        } else if (score >= 84) {
            var bcolumn = document.createElement("td");
            var btext = document.createTextNode("B");
            totalcolumn.appendChild(btext);
            rowtwo.appendChild(bcolumn);
        } else if (score >= 80) {
            var bminuscolumn = document.createElement("td");
            var bminustext = document.createTextNode("B-");
            totalcolumn.appendChild(bminustext);
            rowtwo.appendChild(bminuscolumn);
        } else if (score >= 77) {
            var cpluscolumn = document.createElement("td");
            var cplustext = document.createTextNode("C+");
            totalcolumn.appendChild(cplustext);
            rowtwo.appendChild(cpluscolumn);
        } else if (score >= 74) {
            var ccolumn = document.createElement("td");
            var ctext = document.createTextNode("C");
            totalcolumn.appendChild(ctext);
            rowtwo.appendChild(ccolumn);
        } else if (score >= 70) {
            var cminuscolumn = document.createElement("td");
            var cminustext = document.createTextNode("C-");
            totalcolumn.appendChild(cminustext);
            rowtwo.appendChild(cminuscolumn);
        } else if (score >= 67) {
            var dpluscolumn = document.createElement("td");
            var dplustext = document.createTextNode("D+");
            totalcolumn.appendChild(dplustext);
            rowtwo.appendChild(dpluscolumn);
        } else if (score >= 64) {
            var dcolumn = document.createElement("td");
            var dtext = document.createTextNode("D");
            totalcolumn.appendChild(dtext);
            rowtwo.appendChild(dcolumn);
        } else if (score >= 60) {
            var dminuscolumn = document.createElement("td");
            var dminustext = document.createTextNode("D-");
            totalcolumn.appendChild(dminustext);
            rowtwo.appendChild(dminuscolumn);
        } else if (score < 60) {
            var fcolumn = document.createElement("td");
            var ftext = document.createTextNode("F");
            totalcolumn.appendChild(ftext);
            rowtwo.appendChild(fcolumn);
        }
    }

    tableBody.appendChild(rowtwo);

4 个答案:

答案 0 :(得分:4)

parseInt在无法读取数字时返回“NaN”。你正在测试它是假的,这是不正确的。您的if不会失败到else。它将评估“NaN”为真,并做一些不同于你期望的事情。因此,您需要在测试中测试“NaN”而不是true/false

此外,您需要声明得分并首先将其设置为0.

答案 1 :(得分:1)

如果它说的是未定义的,请尝试var score = 0;,并且你没有在其他地方声明它(你没有在那个代码中)。

第一次迭代的

score +=将尝试将“undefined”+ = 0连接到undefined0

答案 2 :(得分:1)

您必须先定义变量“得分”,然后再使用它来累积得分。

var score = 0;

答案 3 :(得分:0)

如果你想让你的for循环工作5次,那么变量赋值需要是5.你检查过Hava吗?您可以通过代码
确认     警报(字符串(分配));

如果作业不是5,你必须做一些事情,说:
    var assignments = 5;

请告诉我这是否解决了您的问题。