javascript - Javascript 中的数组未更新

标签 javascript arrays object

所以我想做的是,获取表单中输入的数据并将它们存储在对象内各自的变量中。之后,我想将所述对象附加到一个空数组并重复该过程。使用函数 showMe()。,我想打印指定索引处的值。但是,无论我设置什么索引,它都只给出添加到数组中的最后一项的值。我哪里出错了??

var USERS = [];



var user= {

    firstName: "None",
    lastName : "None",
    age : 0,
    bodyType : "None",
    height : 0,
    bdayDay : 0,
    bdayMonth : "None",
    bdayYear : 0,
    gender: "None"

};

function addnew(){


   user.firstName = document.getElementById("fname").value;

   user.lastName =  document.getElementById("lname").value;

   user.age = document.getElementById("age").value;

   if (document.getElementById("genMale").checked)
        user.bodyType = document.getElementById("btMale").value;
   else
        user.bodyType = document.getElementById("btFemale").value;;


user.height = document.getElementById("Height").value;

    if (document.getElementById("genMale").checked)
        user.gender =  document.getElementById("genMale").value;
    else 
        user.gender = document.getElementById("genFemale").value;

    USERS.push(user);


}

function showMe(){

console.log(USERS[1].firstName);
}

最佳答案

您的代码中只有一个全局变量 user

我认为您想要采用面向对象的风格,其中您的 var user 是一个原型(prototype)。请参阅MDN .

除此之外,eykjs 的解决方案是正确的。您的快速解决方案是必须在函数内初始化变量:

function addnew(){
    var user = {
    ...

您的代码不起作用的原因是,在 JavaScript 中,对象是通过引用传递的,这本质上意味着如果您将一个对象分配给另一个变量,它们将是同一个对象。

关于javascript - Javascript 中的数组未更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47103011/

相关文章:

object - 在 PowerShell 中使用多个参数实现自己的方法

JavaScript 将键添加到数组中的每个值

c++ - 如何创建具有可变元素的 C++ 数组?

JavaScript 数组没有正确索引?

javascript - 如何使用纯 JavaScript 访问最内层的双重嵌套数组/对象?

java - 为什么允许将原始数据类型添加到 ArrayList?

JavaScript 异常不会从 chrome 返回到 Visual Studio 2017

javascript - 如何将 scorm 类(class)集成到我的网站

javascript - 将 html 表单数据发送到发件人的电子邮件

c - 声明大数组时出现堆栈溢出异常