我有一个数组定义为:
var subjectCache = [];
然后我有一些代码来构建它,它工作正常。
但是,如果我尝试通过索引引用数组,例如:
var x = subjectCache[0];
或
var x = subjectCache[1];
我得到 undefined
。
此外,subjectCache.length
始终为 0(零)。
如果我尝试通过它的键来引用它,例如:
var x = subjectCache['12345'];
它有效。
这正常吗?难道我不能通过它的索引来引用它吗?
我正在使用 Internet Explorer,如果它有所不同(它可能会有所作为 :( )
[编辑]
这是我用来构建数组的代码,尽管我真的不认为这是罪魁祸首。
这是来自网络服务调用的回调。这工作正常并且正在填充数组。
var subjectCache = [];
var subjectCacheCount = 0;
function refreshSubjectsCallback(data) {
// update subjects
// loop through retrieved subjects and add to cache
for( i=0; i < data.length; i++ )
{
var subject = data[i];
var subjectid = subject.SubjectId;
subjectCache[subjectid] = subject;
subjectCacheCount += 1;
}
}
[/编辑]
最佳答案
您可能手动分配键而不是使用 subjectCache.push()
将新元素添加到数组:
var array = [];
array['foo'] = 'bar';
console.log(array.length); // 0
length
属性不会以您期望的方式反射(reflect)这些变化:
> var a = [];
undefined
> a[100] = 2; // The previous `100` entries evaluate to `undefined`
2
> a.length;
101
相反,使用一个对象:
var object = {};
object['foo'] = 'bar';
for (var key in object) {
var value = object[key];
console.log(value);
}
关于javascript - 无法按索引引用数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12711645/