<html>
<head>
<script type="text/javascript">
var array = new Array(new Array("aa","bb","cc"),new Array("aaa","bbb","ccc"),new Array("aaaa","bbbb","cccc"));
for(var i = 0 ; i <= array.length ; i++) {
window['dynamic'+i] = array[i];
}
var array2;
var array2val1;
var array2val2;
for(var j=0 ; j<=array.length ; j++) {
array2 = window['dynamic'+j];
array2val1 = array2[0];
array2val2 = array2[1];
alert(array2val2);
}
</script>
</head>
</html>
我可以提醒array2val1和array2val2但是在javascript控制台中它们是未定义的。他们有什么问题?
由于
答案 0 :(得分:2)
for(var i = 0 ; i <= array.length ; i++) {
window['dynamic'+i] = array[i];
console.log(window['dynamic'+i])
}
在上面的迭代中,i <= array.length
倾向于创建undefined
并将其推送到window['dynamic'+i]
<强>解释强>
总数组长度为3,而在迭代中则为
i=0,
i=1,
i=2,
i=3 // no element exists so undefined is pushed to `window['dynamic'+i]`
同样的事情j<=array.length
答案 1 :(得分:1)
除了一个小错误之外,所有实际工作正常,请参阅http://jsfiddle.net/Z4QGG/
您需要替换
for(var i = 0 ; i <= array.length ; i++) { ... }
与
for(var i = 0 ; i < array.length ; i++) { ... }
和
for(var j = 0 ; j <= array.length ; j++) { ... }
与
for(var j = 0 ; j < array.length ; j++) { ... }
如果不这样做,则最终会超出array
变量的范围。
答案 2 :(得分:1)
将<=
更改为<
,因为您的循环迭代往往会创建一个未定义的并将其推送到窗口['dynamic'+ i],这是您未定义的原因。