【发布时间】:2013-06-13 19:36:14
【问题描述】:
下面是一个包含对象的函数,我希望能够使用参数访问对象内的特定主体,即使用索引。
问题是当我尝试以这种方式访问属性时,我得到了
未定义
当控制台记录它时。我做错了什么?
moveLeftBtn.on('click', function(nr){
var theBody = {
bodies: {
a: 'foo1',
b: 'foo2',
c: 'foo3'
}
};
var newBody = theBody.bodies[1]; // temporarily hardcoded value instead of argument
console.log(newBody); // <-- undefined, why?
return newBody;
});
编辑
如果我控制台日志 theBody.bodies 我可以看到它的值 (Object {a: Array[5], b: Array[5], c: Array[5]}),但是当我尝试使用 [1] 访问它的属性时,我得到了
未定义
(即使属性包含字符串)。
【问题讨论】:
-
theBody.bodies[nr]是正确的。这称为“括号符号”。另请参阅:stackoverflow.com/questions/11922383/…。您编辑的代码工作正常:jsfiddle.net/q9ECP。请注意,括号表示法不是数组的特殊表示法,它是属性访问的一般工作方式。 如果标识符允许以数字开头,您可以使用arr.1而不是arr[1]访问数组。使用obj.foo或obj['foo']访问普通对象的方式相同。 -
规范中的相关部分:es5.github.io/#x11.2.1.
-
如果您希望项目为
null,请删除'null'值周围的引号 -
@holyredbeard - 好的,现在
theBody赋值后缺少分号 -
如果你看到
(Object {a: Array[5], b: Array[5], c: Array[5]}),那么theBody.bodies'的属性是a、b、c,而不是1、2、3。当然theBody.bodies[1]会显示undefined。应该是theBody.bodies['a']。您想通过索引而不是名称来访问属性吗?这是不可能的(至少不是直接的)。
标签: javascript jquery arrays object properties