使用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 = "";
所以我想知道区别是什么。
如果这个问题多余,我会很快将其删除。
感谢您的光临。
答案 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 = "";
,则另一种情况是您明确告诉该类型将为字符串,并且连接将以所需方式运行!