我可以提醒变量,但javascript控制台说它是未定义的

时间:2014-03-05 13:10:34

标签: javascript

<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控制台中它们是未定义的。他们有什么问题?

由于

3 个答案:

答案 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

JSFiddle

答案 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],这是您未定义的原因。