从数组中获取未定义的值

时间:2010-07-16 02:40:08

标签: javascript

谈话很便宜;我宁愿展示代码:

//global var
var siblings = [];

var rand = new Date().getTime();
siblings.push('uin_' + rand);
alert(siblings['uin_' + rand]); // undefined

为什么未定义?我基本上想要实现的是拥有一个全局对象,该对象将成为存储其中保存有关其他对象的信息的存储。但回到我的问题。我按下了值然后我想提醒它但是未定义...为什么未定义?

5 个答案:

答案 0 :(得分:6)

.push将其附加到数组中,siblings[0]包含它,因为它是(以前)空数组中的第一个元素。

如果您想自己确定密钥,请执行

siblings = {};
siblings['key'] = 'something';

如果要访问每个元素,则以其他方式遍历数组

for ( var l = siblings.length, i = 0; i<l; ++i ) {
   alert( siblings[i] )
}

注意:数组是对象,所以我可以在数组上设置siblings['key'] = 'something';,但这不是首选。

答案 1 :(得分:2)

siblings是一个数组。您将值'uin_'+rand推到其上,因此键将为0。相反,你想要创建一个对象。

var siblings={};
var rand=+new Date();
siblings['uin_'+rand]="something";
alert(siblings['uin_' + rand]);

答案 2 :(得分:0)

因为您将字符串值推送到数组索引0,然后尝试在数组对象上获取不存在的属性。

尝试使用Array.pop()

答案 3 :(得分:0)

为了访问数组,你需要使用数组索引,它基本上是指你想要第1,第2,第3等等。

在这种情况下,请使用siblings[0]

答案 4 :(得分:0)

因为siblings是一个数组,而不是一个关联数组。两种解决方案:

//global var - use as an array
var siblings = [];

var rand = new Date().getTime();
siblings.push('uin_' + rand);
alert(siblings[0]); // undefined

//global var - use as an associative array
var siblings = {};

var rand = new Date().getTime();
siblings.push('uin_' + rand);
alert(siblings['uin_' + rand]); // undefined