Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/401.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Can';按索引的t引用数组_Javascript_Arrays - Fatal编程技术网

Javascript Can';按索引的t引用数组

Javascript Can';按索引的t引用数组,javascript,arrays,Javascript,Arrays,我有一个数组定义为: var subjectCache = []; 然后我有一些代码来构建它,这是正常的 但是,如果我尝试通过索引引用数组,例如: var x = subjectCache[0]; 或 我得到未定义的。 另外subjectCache.length始终为0(零) 如果我试图通过其键引用它,例如: var x = subjectCache['12345']; 它起作用了 这正常吗?难道我不能通过它的索引引用它吗 我使用的是Internet Explorer,如果它能起到作用的话

我有一个数组定义为:

var subjectCache = [];
然后我有一些代码来构建它,这是正常的

但是,如果我尝试通过索引引用数组,例如:

var x = subjectCache[0];

我得到未定义的
。 另外
subjectCache.length
始终为0(零)

如果我试图通过其键引用它,例如:

var x = subjectCache['12345'];
它起作用了

这正常吗?难道我不能通过它的索引引用它吗

我使用的是Internet Explorer,如果它能起到作用的话(而且可能是:()

[编辑]

这就是我用来构建数组的代码,尽管我真的不认为这是错的

这是来自webservice调用的回调。这工作正常,正在填充数组

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;
    }
}
var subjectCache=[];
var subjectCacheCount=0;
函数RefreshSubjectScalBack(数据){
//更新主题
//循环检索到的主题并添加到缓存
对于(i=0;i

[/Edit]

从您的症状来看,您似乎试图将数组视为关联数组

在Javascript中,数组的工作方式如下:

var a = [];
a[1] = 10;
alert(a.length);
var o = {};
o.myProp = true;
o["myOtherProp"] = false;
对象的工作方式如下:

var a = [];
a[1] = 10;
alert(a.length);
var o = {};
o.myProp = true;
o["myOtherProp"] = false;

从您的症状来看,似乎您正试图将该数组视为关联数组

在Javascript中,数组的工作方式如下:

var a = [];
a[1] = 10;
alert(a.length);
var o = {};
o.myProp = true;
o["myOtherProp"] = false;
对象的工作方式如下:

var a = [];
a[1] = 10;
alert(a.length);
var o = {};
o.myProp = true;
o["myOtherProp"] = false;

数组只使用数字键而不是字符串。字符串为对象指定属性,并且不作为
长度的一部分计算,也不作为数字索引


构建数组时,请确保指定给数组中的数字位置。

数组仅使用数字键而不是字符串。字符串为对象指定属性,并且不作为
长度的一部分计算,也不作为数字索引


构建数组时,请确保您正在数组中指定一个数字位置。

否,它将不起作用,因为您没有创建数组,而是创建对象。 您必须通过其密钥访问它

var x = subjectCache['12345'];

如果这样做有效,而
subjectCache.length
不起作用,我认为您正在创建一个对象而不是数组。您感到困惑。

不,它不会起作用,因为您没有创建数组,而是创建对象。 您必须通过其密钥访问它

var x = subjectCache['12345'];

如果这样做有效,而
subjectCache.length
不起作用,我认为您是在将对象变成数组。您感到困惑。

您可能是在手动分配键,而不是使用
subjectCache.push()
向数组添加新元素:

var array = [];

array['foo'] = 'bar';

console.log(array.length);  // 0
length
属性不会以您期望的方式反映这些更改:

> 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);
}

您可能是手动分配键,而不是使用
subjectCache.push()
将新元素添加到数组中:

var array = [];

array['foo'] = 'bar';

console.log(array.length);  // 0
length
属性不会以您期望的方式反映这些更改:

> 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);
}

沿路的某个地方丢失了数组,变量
subjectCache
指向另一种对象


如果它是一个数组,它的长度不能为零,并且不能包含可使用
subjectCache['12345'访问的项
。当访问数组中的项目时,如果使用数字索引或表示数字的字符串,则没有任何区别。

沿途某个地方丢失了数组,变量
subjectCache
指向不同类型的对象


如果它是一个数组,它的长度不能为零,并且不能包含可使用
subjectCache['12345'访问的项
。当您访问数组中的项目时,如果您使用数字索引或表示数字的字符串,则没有任何区别。

您使用什么代码构建数组?您可以发布一些代码来显示如何将项目添加到数组中吗?什么版本的internet explorer?您是否在任何其他浏览器上进行过测试?我向您保证时间与IE无关。数组不可能具有键
12345
.length
为零的属性。请在例如JSFIDLE上发布一个演示。似乎您正在为数组使用非数字键。不要这样做,请使用对象,而不是数组。数组实际上只使用数字键。y是什么代码你用什么来构建你的数组?你能发布一些代码来说明你是如何向数组中添加项目的吗?什么版本的internet explorer?你在其他浏览器上测试过吗?我向你保证,这次它与IE无关。数组不可能有键为
12345
.length
为零的属性se在例如JSFIDLE上发布了一个演示。似乎您正在对数组使用非数字键。不要这样做,请使用对象而不是数组。数组实际上只对数字键起作用。我担心这在这里是不正确的。
arr[12345]
arr['12345']
是相同的。尽管考虑了数字字符串(因为所有属性名在内部都存储为字符串)。恐怕这里不正确。
arr[12345]
arr['12345']
是一样的。尽管如此,还是会考虑数字字符串(因为所有属性名在内部都存储为字符串)。
[]
会创建一个数组,并且
arr['12345']
的工作方式与
arr[12345]
相同
[]
确实创建了一个数组,
arr['12345']
的工作方式与
arr[12345]
的工作方式相同。