我想返回一个Object,但我得到一个String

时间:2013-11-01 15:57:09

标签: javascript string search object return

您好我有一个相当奇怪的问题,没有多大意义。 我有一个变量,它是一个字符串,我想搜索一个具有相同名称的对象(也是一个对象)的属性。像这样:

var ObjectProperty; /// multi-layer object
var PropertyName; //string

如果与Object中的PropertyName匹配,我想返回它。 示例代码:

OBJECT:
Bird.Raven = {
Name:"Raven",
Color:"Black",
} 
//Object

Bird.Duck = {
Name:"Duck",
Color: "Gray",
} 
//Object

Bird.Cardinal = {
Name:"Cardinal",
Color: "Red",
}//Object
///ObjectProperty sample.

Key我想在“Bird”中找到:

var Cardinal = "Cardinal"; //string
///PropertyName sample.

我正在使用的当前函数,假设'n'是我要搜索的PropertyName变量:

var searchBirds = function(n) {
  for(var key in Bird) {
    var keyName = key.toString();
  if(keyName == n){
  console.log("bird " + key + " has been found.");
  console.log(typeof key);//RETURNS STRING
  return key;
  }
  else{
  console.log(n + " could not be found")
  };
  }
  }

为什么它应该是一个对象时返回一个字符串?如何让它作为对象返回键?怎么了? Vanilla Javascript首选。

感谢您的帮助,我希望这是有道理的!

1 个答案:

答案 0 :(得分:4)

语句for(var key in Bird)遍历Bird对象上可枚举属性的名称。要获取该属性的,请执行Bird[key]

示例:

var key, birdObject;
for (key in Bird) {
    birdObject = Bird[key];
    console.log(key + ".Color = " + birdObject.Color);
}

...会输出

Raven.Color = Black
Duck.Color = Grey
Cardinal.Color = Red

...在no specified order 中(尽管几乎所有引擎都会按照属性添加到对象的顺序执行它们[前提是没有属性名称都是数字,在这种情况下会有更多变化] - 但在规范中