Javascript 当u.allKeys(obj)数组(比如var arr)被引用到object:obj.arr[0]时,它会返回未定义的行为

Javascript 当u.allKeys(obj)数组(比如var arr)被引用到object:obj.arr[0]时,它会返回未定义的行为,javascript,underscore.js,Javascript,Underscore.js,对于那些不知道allKeys(obj)做什么的人,这里有一个片段 var allKeys = function(obj){ var key=[]; for(var pname in obj){ key.push(pname); } return key; };` 因此,它返回传递给它的对象的属性/方法名称数组 //Say I have an objec

对于那些不知道allKeys(obj)做什么的人,这里有一个片段

var allKeys = function(obj){
          var key=[];
          for(var pname in obj){
          key.push(pname);              
          }
          return key;
        };`
因此,它返回传递给它的对象的属性/方法名称数组

//Say I have an object obj.
var obj={firstname:"John", lastname:"Adams"};
var arr=allKeys(obj);  //stores the returned array of property names into arr.
for(var i;i<arr.length;i++){
  console.log("Property name: "+arr[i]); //this detects the propertyname
  console.log("Value name"+obj.arr[i]);  //But when its referred to the object it does not return its value,why so ?
  console.log("------");
}
//假设我有一个对象obj。
var obj={姓:“约翰”,姓:“亚当斯”};
var arr=所有键(obj)//将返回的属性名称数组存储到arr中。

对于(var i;i您应该以这种方式获取值。
[]
都用于获取特定键的值,但当键是变量时,您需要
[]
,而不是

如果您只想显示键和值,则无需以这种复杂的方式进行

var obj={firstname:"John", lastname:"Adams"};
for(let key in obj){
    console.log("Property name: "+key); //this detects the propertyname
    console.log("Value name"+obj[key]);  
    console.log("------");
}

这就是您所需要的。

这将为您提供与预期相同的结果

var allKeys=函数(obj){
var键=[];
for(对象中的变量pname){
按键(pname);
}
返回键;
};
var obj={姓:“约翰”,姓:“亚当斯”};
var arr=allKeys(obj);//将返回的属性名数组存储到arr中。

对于(var i=0;i我表示感谢,这是我关于stackoverflow的第一篇文章!你能告诉我为什么“.”不起作用吗?非常感谢:调整了重复的文章?非常感谢。我如何通过这些数组间接添加带有值的属性名,而不直接将其添加到对象文本中?