【问题标题】:Using numbers for names of javascript object elements使用数字作为 javascript 对象元素的名称
【发布时间】:2010-11-12 09:20:43
【问题描述】:

以下代码有效吗?

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

alert(objs.4.someMethod());

如果不是,应该如何重写以完成我想要的?

【问题讨论】:

    标签: javascript jquery oop


    【解决方案1】:

    你应该编辑你的代码如下:

    var i;
    var objs = {};
    for (i = 0; i < 10; i++) {
      objs[i] = new FooObject();
    }
    
    alert(objs[4].someMethod());
    

    【讨论】:

    • 如果索引彼此接近,并且您从不打算使用数值以外的任何值作为键,您可以将var objs = {}; 替换为var objs = [];。会更干净。
    • 它们不会彼此靠近,我在问题中使用的 for 循环只是为了说明问题。索引可以是不规则的和随机的..
    【解决方案2】:
    var i; 
    var objs = new Array();
    
    for(i = 0; i < 10; i++)
    {
       objs.push(new FooObject());
    }
    
    
    objs[4].someMethod();
    

    【讨论】:

    • 我不想使用推送,因为数字可能不是完全按升序排列的。 0-4之后,5和6可能会丢失,下一个数字可能是7,你能按照那个重写吗?
    • 你能否提供更多细节,我很困惑。
    【解决方案3】:

    变量名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]);
    }
    

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

    【讨论】:

    • 他不是将它们用于变量名称,而是用于属性名称;这是完全有效的,但是必须使用语法“objs[4].someMethod()”来引用它们——尽管他不会有像幻长属性和各种数组实例方法这样有用的东西,这意味着他会更好正如你所说的那样使用数组:-)
    • 我不能使用数组,因为当我使用数字时,它们的顺序并不完美,它们可能从 10 开始,然后可能缺少 5 个块,下一个元素可能是 15。数组不会那样工作。
    • 真的吗?我可以有不规则命名的数组索引吗?我认为 javascript 过去不喜欢那些
    • @Click Upvote - 如果您尝试猜测键值,您只会运行它没有问题,例如在 for(i = 0; i
    • 如果数组以大于 0 的值开头怎么办?还能用吗?
    【解决方案4】:

    您不能将数字用作变量名,因为在 Javascript 中,数字作为它们自己的对象集存在(即,您可以认为 4 已经是一个无法覆盖的全局变量)。

    【讨论】:

      猜你喜欢
      • 2017-02-20
      • 2014-08-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多