2011-03-23 79 views
2

我想使用一个变量作为数组中的索引参数,但由于某种原因,当我这样做时,它会变成“未定义”。有任何想法吗?在JavaScript中使用变量作为数组参数?

var object_number = []; 
var x = 1; 

    function create_new_object() 
    { 
     object_number[x] = new happy_object(); 
     x++; 

    } 
+0

你真的调用了'create_new_object()'吗? – BoltClock 2011-03-23 17:52:15

+0

你在访问'object_number [0]'吗?因为你正在设置'x = 1',所以如果你试图访问它,索引0将是不确定的。 – moe 2011-03-23 17:54:50

+1

你确实定义了'happy_object'吗? (严重的是,这个简化的测试用例已经减少到不可能工作的程度,甚至没有一行代码可能会出现任何“未定义”的代码) – Quentin 2011-03-23 17:55:34

回答

3

数组的下标在JavaScript从零开始。当x开始于1时,在阵列的第一个位置有一个undefined元素。改为从x=0开始。

但是,有一个更好的方法可以做到这一点。而不是手动跟踪列表中的最后一个元素,您可以使用Array.push()将新元素添加到结尾。

var object_number = []; 

function create_new_object() 
{ 
    object_number.push(new happy_object()); 
} 

当你想找出有多少元素的数组中,使用Array.length(或Array.push()返回的数字)。

进一步的参考文献:Array @ MDC

1

您的object_number是一个没有元素的空数组。因此你得到这个错误。 要将元素添加到数组中,您需要使用push方法。

object_number.push(new happy_object()); 

还需要从0而不是1开始你的数组索引即你x应该是0

0

除了以前的答案:

不同于“正常”的语言(其使用块范围),JavaScript使用函数作用域。 因此,当你像这样使用它时,你的功能范围就存在于你的功能范围内。

0

你不能乱用数组键在JS太多太多 - 如果你想要一个更坚实的,可定义的关系,你需要做模仿的关联数组:

var object_number = {}; 
var x = 1; 

function create_new_object() { 
    object_number[x] = new happy_object(); 
} 

另外,我'd结合你的var语句。使可变/功能提升更清晰。

var object_number = {} 
    , x = 1; 
相关问题