【问题标题】:Console says JavaScript array is undefined, but I'm able to log its contents控制台说 JavaScript 数组未定义,但我能够记录其内容
【发布时间】:2013-07-30 23:24:20
【问题描述】:

我有一个数组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 文件中请求它,浏览器将记录该数组,但如果我从控制台直接请求它则不会;而且,即使在我用对象填充它之后,它仍然是未定义的,即使它们出现在控制台中。

提前致谢。

【问题讨论】:

  • 你忘记了括号 saveGrade()
  • 你的gradesArray最初声明在哪里?
  • @TimurShahbanov:错了。
  • 我在文档准备函数的最开始声明了数组。
  • 问题已解决——只是忘记通过在 $(document).ready(function() {...}); 之外声明数组来使其成为全局变量。一定很累。谢谢大家。

标签: javascript jquery arrays object


【解决方案1】:

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

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

【讨论】:

  • 是的!解决了。它包含在文档准备功能中。好电话。
  • 当然是被包裹到$(...)中了,所以控制台无法使用,+1 ^^
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2013-06-09
    • 1970-01-01
    • 1970-01-01
    • 2017-11-06
    • 2021-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多