看到"未定义"迭代数组时打印

时间:2015-05-01 15:29:27

标签: javascript arrays

我正在迭代一个JavaScript数组对象。我编写了一个迭代数组元素的函数。它的工作原理但在结果之上有写的“未定义的”#。我不想看到这个,知道如何解决这个未定义的词语会很有帮助。



var userlist = [{
    "username": "Tom",
    "Current_latitude": 23.752805,
    "Current_longitude": 90.375433,
    "radius": 500
  },

  {
    "username": "Jane",
    "Current_latitude": 23.752805,
    "Current_longitude": 90.375433,
    "radius": 400
  },

  {
    "username": "Dave",
    "Current_latitude": 23.765138,
    "Current_longitude": 90.362601,
    "radius": 450
  }, {
    "username": "Sarah",
    "Current_latitude": 23.792452,
    "Current_longitude": 90.416696,
    "radius": 600
  },

  {
    "username": "John",
    "Current_latitude": 23.863064,
    "Current_longitude": 90.400126,
    "radius": 640
  }
];


var x = Tom(userlist);

function Tom(user) {
  var text;
  for (var i = 0; i < user.length; i++) {
    text += "<li>" + user[i].username + "</li>";
  };
  //text+="</ul>"
  document.getElementById("demo").innerHTML = text;
}

//document.getElementById("demo").innerHTML=userlist[0].username+" "+userlist[0].Current_latitude +  " " + userlist[0].Current_latitude+"" + userlist[0].Current_longitude+" "+ userlist[0].radius;
&#13;
<p>How to create A javaScript Object Array.</p>
<p id="demo"></p>
&#13;
&#13;
&#13;

2 个答案:

答案 0 :(得分:6)

您需要将有价值的text初始化为空字符串,如下所示:

var text = "";

JavaScript中未初始化的变量默认为特殊值undefined,在连接中找到文本。

正如评论中所述,您的HTML也存在一个问题:<li>标记应仅显示在包含<ul><ol><menu>标记内。 您可以考虑将<li> ... </li>更改为<div> ... </div>或将<ul> {{</ul> {{{{{ {1}}。

答案 1 :(得分:4)

这是因为你还没有初始化你的变量:

var text;  //text is undefined at this point
for (var i = 0; i < user.length; i++) 
{
    //the first iteration of the loop will append to "undefined"
    text+="<li>"+ user[i].username+"</li>";
};

只需给它一个初始值:

var text = '';
for (var i = 0; i < user.length; i++) 
{
    text+="<li>"+ user[i].username+"</li>";
};

然而,正如Juhana所指出的,这不会产生有效的标记。您可以取消注释结束标记,并将text初始化为<ul>,而不是:

var text = '<ul>';
for (var i = 0; i < user.length; i++) 
{
    text+="<li>"+ user[i].username+"</li>";
};
text += "</ul>";