为什么这个返回哈希会给我带来问题?

时间:2012-11-01 22:11:00

标签: javascript arrays key

  

可能重复:
  Using a variable for a Javascript object key

我无法弄清楚我是如何搞砸的。

我的代码给了我错误:

invalid property id

代码:

 return  { this.Obj.itemid :
               {  Color : this.Obj.color,
                  Name : this.Obj.name,
                  Year : this.Obj.year
                }
           };

我需要将这些哈希值作为数组返回(因此返回),但无论我做什么,它都会返回上面的错误,或者var引用被字符串化。我实际上无法获得动态js值作为键。

我试过这个:

" + this.Obj.itemid + "

和此:

var itemid = this.Obj.itemid;
return { itemid : {
         //etc..
    }}

有什么想法吗?

2 个答案:

答案 0 :(得分:7)

问题在于你不能以这种方式使用this.Obj.itemid

相反,尝试类似:

var ret={};
ret[this.Obj.itemid]=
   {
      Color : this.Obj.color,
      Name : this.Obj.name,
      Year : this.Obj.year
   };
return ret;

答案 1 :(得分:4)

属性初始值设定项中冒号左侧显示的内容必须是有效标识符,字符串文字或数字文字。它总是字面上使用。 this.Obj.itemid不属于这些事情。

如果您尝试使用this.Obj.itemid作为属性名称,则:

var ret = {};
ret[this.Obj.itemid] = {
    Color : this.Obj.color,
    Name : this.Obj.name,
    Year : this.Obj.year
};

这利用了这样一个事实,即你可以使用括号表示法和属性名称的任何表达式。 ret[this.Obj.itemid] = ...将在ret上创建一个属性,其名称是表达式this.Obj.itemid的结果。

更简单的例子:

var foo = {};
var b = "bar";
foo[b] = 42;
console.log(foo.bar); // "42"