那么为什么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);
}
答案 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; }