返回NaN的数组数组

时间:2012-03-14 20:30:06

标签: javascript

那么为什么myarray [bla] [bl]总是等于NaN?如果我用1维(myarray [bla])做同样的事情,我得到数字。

var bla = 'blabla';
var bl = 'bla';
var myarray = [];
for (i = 0; i < 10; i++) {
    if (!myarray[bla]) {
        myarray[bla] = [];
    }
    myarray[bla][bl] += i;
    console.log(myarray[bla][bl] + " + " + i);
}​

3 个答案:

答案 0 :(得分:3)

好的,让我们逐步完成你的循环,用bla的字符串值替换变量'blabla'的实例:

if (!myarray['blabla']) {
  myarray['blabla'] = [];
}

javascript中的数组是整数值的索引。您的代码在这里做的是将expando属性添加到名为blabla的数组实例中。那就是:

myarray.blabla = [];

现在重新考虑你的增量声明:

myarray['blabla'][bl] += i;

或者,使用expando属性:

myarray.blabla.bl  // remember that "myarray.blabla" is set to the empty array above

这是尝试访问空数组上名为bl的属性。这就是你在这里获得undefined的原因。

无论如何,作为最佳实践,您可能希望避免在类似哈希表的javascript中使用数组,因为这样的问题必然会在足够的时间后出现。

答案 1 :(得分:0)

如果我们扩展一点,我希望你能看到问题,

if (!myarray[bla]) {
    myarray[bla] = [];
}
myarray[bla][bl] = myarray[bla][bl] + i;

提示:myarray[bla][bl] = undefined

答案 2 :(得分:0)

因为myarray[bla][bl]未设置...,您需要

if ( !myarray[bla][bl] ){ myarray[bla][bl] = 0; }