Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/441.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 为什么这个返回哈希给了我问题?_Javascript_Arrays_Key - Fatal编程技术网

Javascript 为什么这个返回哈希给了我问题?

Javascript 为什么这个返回哈希给了我问题?,javascript,arrays,key,Javascript,Arrays,Key,可能重复: 我不知道我是怎么搞砸的 我的代码显示错误: invalid property id 代码: 我需要将这些散列作为数组返回,因此返回,但无论我做什么,它要么返回上面的错误,要么将var引用字符串化。实际上,我无法将动态js值作为键放在其中 我试过这个: " + this.Obj.itemid + " 这是: var itemid = this.Obj.itemid; return { itemid : { //etc.. }} 有什么想法吗?问题是您不

可能重复:

我不知道我是怎么搞砸的

我的代码显示错误:

invalid property id
代码:

我需要将这些散列作为数组返回,因此返回,但无论我做什么,它要么返回上面的错误,要么将var引用字符串化。实际上,我无法将动态js值作为键放在其中

我试过这个:

" + this.Obj.itemid + "
这是:

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

有什么想法吗?

问题是您不能以这种方式使用this.Obj.itemid

相反,请尝试以下方法:

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

问题是您不能以这种方式使用this.Obj.itemid

相反,请尝试以下方法:

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

属性初始值设定项中冒号左侧显示的内容必须是有效标识符、字符串文字或数字文字。它总是按字面意思使用。这个.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"

属性初始值设定项中冒号左侧显示的内容必须是有效标识符、字符串文字或数字文字。它总是按字面意思使用。这个.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"

这个和这个,Obj等等。。都很好,因为右手的作业是正确的。我得到了所有正确的值,除了var:this.Obj.itemid在左边时总是字符串化,或者用作键。我将查看您的链接;=谢谢。这个还有这个。Obj等等。。都很好,因为右手的作业是正确的。我得到了所有正确的值,除了var:this.Obj.itemid在左边时总是字符串化,或者用作键。我将查看您的链接;=谢谢,哇。这真是太棒了。非常感谢。真是帮了大忙,我真的很奇怪。我在想,为什么那个复选标记不是绿色的呢。嗯,好奇。我肯定检查过了。无论如何,再检查一遍:-哇。这真是太棒了。非常感谢。真是帮了大忙,我真的很奇怪。我在想,为什么那个复选标记不是绿色的呢。嗯,好奇。我肯定检查过了。无论如何,再次检查:-