通过变量中的键名获取javascript对象属性

通过变量中的键名获取javascript对象属性,javascript,Javascript,假设我在javascripts中有这样的东西: var obj = { subObj : {} }; var type = 'subObj'; 我如何才能获得obj的subObjw/type?例如,我想做如下事情: obj.(type); obj[类型] 使用下标符号 属性通过名称访问,使用点表示法: MemberExpression . IdentifierName CallExpression . IdentifierName MemberExpression [ Expressi

假设我在javascripts中有这样的东西:

var obj = {
  subObj : {}
};
var type = 'subObj';
我如何才能获得
obj的
subObj
w/
type
?例如,我想做如下事情:

obj.(type);
obj[类型]

使用下标符号

属性通过名称访问,使用点表示法:

MemberExpression . IdentifierName
CallExpression . IdentifierName
MemberExpression [ Expression ]
CallExpression [ Expression ]
或括号符号:

MemberExpression . IdentifierName
CallExpression . IdentifierName
MemberExpression [ Expression ]
CallExpression [ Expression ]

您可以像JavaScript中的关联数组一样处理对象,因此可以访问内部对象,如:

var obj = {
    subObj : {}
};

var type = "subObj";
var subObj = obj[type];

没有任何意义-你不是在访问类型,这些是简单的属性-你可以通过
obj[keyName]
或类似的方式访问它们,但是使用
type
是非常混乱的,这肯定是缺乏理解的迹象,以防有人想知道如何(动态地)访问子属性,我已经找到了一种方法,如果有更简单的方法,请告诉我:

function getPropertyByKeyPath(targetObj, keyPath) { 
  var keys = keyPath.split('.');
  if(keys.length == 0) return undefined; 
  keys = keys.reverse();
  var subObject = targetObj;
  while(keys.length) {
   var k = keys.pop();
   if(!subObject.hasOwnProperty(k)) {
    return undefined;
   } else {
    subObject = subObject[k];
   }
 }
 return subObject;
}
例如:

      var o = {result : {info:{ version:1, comment: 'test'}}};
      var subObject = getPropertyByKeyPath(o, 'result.info');
      console.log(subObject);
将导致:

{version: 1, comment: "test"} 

嗯,属性就是类型。如果您选择“console.log(typeof(obj.subObj));”,它将向标准输出返回“object”。但是,可以通过“obj.subObj”或“obj['subObj']”而不是“obj[subObj]”访问属性。后者不起作用,因为括号中对象的名称必须以字符串形式表示。