使用数字作为JavaScript对象元素的名称

3
以下代码是否有效?
var i;
var objs={};
for (i=0; i <10; i++)
{
   objs.i=new FooObject();
}

alert(objs.4.someMethod());

如果不行,该怎么改写以实现我想要的效果?
4个回答

4
您需要按照以下方式编辑您的代码:
var i;
var objs = {};
for (i = 0; i < 10; i++) {
  objs[i] = new FooObject();
}

alert(objs[4].someMethod());

2
如果索引彼此接近,并且您永远不打算使用数字以外的值作为键,则可以将 var objs = {}; 替换为 var objs = [];。这样会更加简洁。 - Sinan Taifour
1
它们不会彼此靠近,我在问题中使用的for循环只是为了表达重点。索引可以是不规则和随机的。 - Ali

2
var i; 
var objs = new Array();

for(i = 0; i < 10; i++)
{
   objs.push(new FooObject());
}


objs[4].someMethod();

我不想使用push,因为数字可能不是完美的升序。在0-4之后,5和6可能会丢失,下一个数字可能是7。你能根据这个重新编写吗? - Ali
你能提供更多细节吗?我有点困惑。 - kemiller2002

2
您不能使用数字作为变量名1。如果您想通过数字值引用一个项目,请使用数组2。然后可以通过数组中的键访问项目。如果您想循环遍历,可以使用for...in选项3。如果您的键是连续的,这并不重要。
var x;
var myItems = new Array();
myItems[0] = "Foo";
myItems[9] = "Bar";
myItems[5] = "Fiz";

for (x in myItems) {
  alert(myItems[x]);
}

1. http://www.w3schools.com/js/js_variables.asp 2. http://www.w3schools.com/js/js_obj_array.asp 3. http://www.w3schools.com/js/tryit.asp?filename=tryjs_array_for_in

1
他并不是用它们作为变量名,而是作为属性名;这是完全有效的,但必须使用语法“objs[4].someMethod()”来引用它们 - 虽然他就没有像魔术长度属性和各种数组实例方法这样有用的东西了,这意味着他最好像你说的那样使用一个数组 :-) - NickFitz
1
我不能使用数组,因为当我使用数字时,它们不会按照完美的顺序排列,它们可能以10开始,然后缺失5个块,下一个元素可能是15。数组不能处理这种情况。 - Ali
真的吗?我可以有不规则命名的数组索引吗?我认为JavaScript以前不喜欢那些。 - Ali
@点击点赞 - 只有在尝试猜测键值时,例如在 for(i = 0; i < myarray.length; i++) alert(myarray[i]); 中,您才会遇到问题。在这种情况下,您可能会请求不存在的索引。 - Sampson
如果数组以大于0的值开头,它还能正常工作吗? - Ali
是的。 - Sampson

1

你不能使用数字作为变量名,因为在Javascript中,纯粹的数字已经存在于它们自己的对象集中(例如,你可以认为4已经是一个全局变量,无法被覆盖)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接