Javascript Array并将它们分配给变量,但第一个值为undefined。为什么?

时间:2014-08-20 07:05:19

标签: javascript html arrays

使用Array从JS创建无序列表时,第一个值是未定义的。

var list; //box for accumulating list tags
var arr = ['menu1', 'menu2', 'menu3', 'menu4'];

for(var i = 0; i < arr.length; i++) {
    list += '<li>' + arr[i] + '</li>';
}

document.getElementById('menu').innerHTML = list;

结果:

<ul id="menu">
undefined
<li>menu1</li>
<li>menu2</li>
<li>menu3</li>
<li>menu4</li>
</ul>

但首先分配空值,一切都会好的。

var list = "";

所以我想知道区别是什么。

如果这个问题多余,我会很快将其删除。

感谢您的光临。

6 个答案:

答案 0 :(得分:1)

不,不,错误就在这里

list += 

假设列表之前有一些值,并且它在第一次运行时没有它并且未定义,这就是第一行未定义的原因。你应该在那里添加一个检查来分配而不是在第一次迭代时连接。

不是用其他地方建议的空字符串初始化列表(用空字符串连接东西没有意义),你应该真的在做

for(var i = 0; i < arr.length; i++) {
    if(i==0)
       list = '<li>' + arr[i] + '</li>';
    else
      list += '<li>' + arr[i] + '</li>';
}

答案 1 :(得分:1)

在JavaScript值初始化之前,它们是未定义的。

让我们通过例子分解案例,以帮助明确这一点。

引用未声明的变量

在JavaScript中,您必须先声明变量,然后才能引用它。例如,

var x;
console.log(x);

如果您只是键入以下内容,则会发生引用错误。

console.log(x);

引用未初始化变量

使用var关键字声明变量后,它可以在任何表达式中使用,但初始值为undefined。例如

var x;
x === undefined; // true

通过赋予变量类型

来提供变量类型

一旦给变量一个值,或给它任何 new 值,你基本上让解释器知道变量的值和类型

例如,

var x;
typeof x; // undefined
x = 1;
typeof x; // number
x = 'a';
typeof x // string

混合型表达式

在JavaScript中,如果表达式是混合类型,则解释器会将其中一个值强制为另一个值。

例如,

var x = 1;
var y = 'a';
z = x + y; // '1a'
typeof z // string

对所有表达式执行类型强制,而不只是+,并不总是直截了当。例如,

[] == false // true

答案 2 :(得分:0)

在声明list变量

时指定空字符串

当您使用list+=表示您已经在列表变量中已经有值但是您没有

var list=""; //box for accumulating list tags
var arr = ['menu1', 'menu2', 'menu3', 'menu4'];

for(var i = 0; i < arr.length; i++) {
  // here is `list` is undefined when loop execute first time 
    list += '<li>' + arr[i] + '</li>';
}

document.getElementById('menu').innerHTML = list;

答案 3 :(得分:0)

问题部分

那是因为当你定义一个变量&amp;没有初始化,它将是未定义的。

var list; //list is undefined here

所以当你第一次说

list += arr[i]

所以它基本上是

list = undefined + arr[0];

所以最后的输出将是

'undefined<li>...'

工作部件

你在说

var list = '';

所以第一次会

list = '' + arr[0];

所以最后的输出将是

'<li>...'

答案 4 :(得分:0)

这是因为当你定义一个这样的变量时:

var list;

这是undefined。要解决这个问题,只需将其设为空字符串即可。正如您所说的那样。

var list = "";

正如一些答案已经提到的那样。当您将undefined变量与字符串连接时,undefined将变为字符串'undefined' + ...

答案 5 :(得分:0)

JS是一种动态语言,所以如果你只定义一个var,就无法知道哪种类型。如果您使用var list = "";,则另一种情况是您明确告诉该类型将为字符串,并且连接将以所需方式运行!