.push不是一个函数,使用Javascript和本地存储

3

我查看了所有与此主题相关的链接,发现这种情况发生的原因可能是我的变量不是一个数组。我不太确定该如何解决。以下是我的代码:

        function addStudent() {
            var newStudentInfo = {
                'studentNumber': document.getElementById("addStudentStudentNumber").value,
                'name': document.getElementById("addStudentName").value
            }

            var oldStudentInfo = [];
            oldStudentInfo = JSON.parse(localStorage.getItem("students")) || [];
            oldStudentInfo.push(newStudentInfo); 
            localStorage.setItem("students", JSON.stringify(oldStudentInfo));
        }

当我查看Google Chrome中的错误时,它告诉我:

Paused on exception: 'TypeError: oldStudentInfo.push is not a function'.

我哪里出错了?非常感谢提供帮助!


1
看起来这个返回了一个真值:JSON.parse(localStorage.getItem("students")),而且它不是一个数组,在使用之前发送一个 console.log() 以便你可以看到它是什么。 - Santiago Hernández
@SantiagoHernández 我得到了 Object {studentNumber: "r2424", name: "4242"} - name1234567
最初oldStudentInfo是一个带有push方法的数组,但是您后来将其覆盖为一个对象,该对象没有push方法。 - dsuckau
1个回答

3

显然那不是一个数组,你不能像那样在Object上调用push()方法,因为它没有这样的方法。考虑将该对象推入原始的oldStudentInfo数组中,如下所示:

function addStudent() {
  var newStudentInfo = {
      'studentNumber': document.getElementById("addStudentStudentNumber").value,
      'name': document.getElementById("addStudentName").value
  }

  var oldStudentInfo = JSON.parse(localStorage.getItem("students"));
  // now let's check if the stored value is an array
  if(!(oldStudentInfo instanceof Array))
    oldStudentInfo = [oldStudentInfo]; // if not, create one
  oldStudentInfo.push(newStudentInfo); // push a new student inside of it
  localStorage.setItem("students", JSON.stringify(oldStudentInfo));
}

成功了!感谢您的迅速回复和清晰的解释! - name1234567

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接