控制台说JavaScript数组是未定义的,但我'我可以记录它的内容

Console says JavaScript array is undefined, but I'm able to log its contents

本文关键字:我可以 记录 但我 JavaScript 数组 未定义 控制台      更新时间:2023-09-26

我有一个数组gradesArray,我可以在程序中用console.log(gradesArray)看到它,但当我在(Chrome)控制台中键入gradesArraygradesArray.length或类似内容访问它时,我会得到ReferenceError: gradesArray is not defined

下面是我用来用Grade对象填充数组的jQuery:

$(document).on('click', '#savegrades', saveGrade);
function saveGrade() {                     // grabbing data from a form
    var studentClass = currentClass;
    var studentName = currentStudent;
    var dateStamp = $(this).parents('#gradingform').children('#date').val().replace(/-/g, "");
    var teamwork = parseInt( $(this).parents('#gradingform').children('#teamwork').val() );
    var participation = parseInt( $(this).parents('#gradingform').children('#participation').val() );
    var punctuality = parseInt( $(this).parents('#gradingform').children('#punctuality').val() );
    var professionalism = parseInt( $(this).parents('#gradingform').children('#professionalism').val() );
    var timemanagement = parseInt( $(this).parents('#gradingform').children('#timemanagement').val() );
    var newGrade = new Grade(studentClass, studentName, dateStamp, teamwork, participation,         // create new Grade object from form values
                                punctuality, professionalism, timemanagement);
    alert('class: ' + newGrade.studentClass + ', name: ' + newGrade.studentName + ', date: ' + newGrade.dateStamp + ', teamwork: ' + newGrade.teamwork + ', participation: ' + newGrade.participation + ', punctuality: ' + newGrade.punctuality + ', professionalism: ' + newGrade.professionalism + ', time management: ' + newGrade.timemanagement + ', total: ' + newGrade.total);
    gradesArray.push(newGrade);
    console.log(gradesArray);
}

运行完这段代码后,console.log(gradesArray)位运行得很好,给了我一个很好的Grade对象数组。但是当我在控制台中键入gradesArray时,我会得到一个引用错误,告诉我该变量是未定义的。此外,在程序的后面,我尝试使用if (typeof gradesArray != 'undefined'),但函数没有启动。

怎么回事?如果我从.js文件中请求,浏览器会记录数组,但如果我从控制台中请求,它不会记录;而且,即使在我用对象填充了它之后,它仍然是未定义的,即使它们显示在控制台中。

提前谢谢。

您没有复制所有代码;您的代码被封装在另一个函数($(function () {})?)中,该函数包含gradesArray的var语句。因为它不是全局变量,所以无法从控制台对其进行检查。最简单的方法是将var语句放在$():之外

var gradesArray = []
$(function () { ... });

当您登录控制台时,gradesArray已超出范围。如果需要,请尝试在全局范围内声明它。