当前位置: 首页 > 知识库问答 >
问题:

当发生意外行为时。allKeys(obj)数组(比如var arr)指的是对象:obj。arr[0],它返回未定义的

方夜洛
2023-03-14

对于那些不知道_. 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("------");
}

这应该给我:

属性名称:firstname
值名称:John
------

属性名称:lastname
值名称:Adams
------

相反,它给了我:

属性名称:firstname
值名称:un定义
------
属性名称:lastname
值名称:un定义
------

你知道为什么会这样吗?

共有2个答案

聂宜
2023-03-14

.[]都是用来获取某个key的值的,但是当key是一个变量时,你需要[],而不是..

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

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("------");
}

这就是你所需要的。

林修真
2023-03-14

这会给你和你预期的一样的结果

js lang-js prettyprint-override">var allKeys = function(obj){
          var key=[];
          for(var pname in obj){
          key.push(pname);              
          }
          return key;
        };

var obj={firstname:"John", lastname:"Adams"};
var arr=allKeys(obj);  //stores the returned array of property names into arr.
for(var i=0;i<arr.length;i++){
  console.log("Property name: "+arr[i]); //this detects the propertyname
  console.log("Value name: "+obj[arr[i]]); // I used BRACKET NOTATION
  console.log("------");
}
 类似资料:
  • 问题内容: 嗯,我有一个金钱对象,可以将其他金钱对象添加到其中。我在Java中尝试测试我的代码是否还可以,但是随后失败了。 我非常肯定自己的代码是正确的(返回正确的答案),我认为我使用的是错误的方式。T_T 如果要查找是否要进行测试,该怎么使用? 问题答案: 您没有在Money类中重写Object类中的方法。如果是这样,则通过它们的引用比较对象,在这种情况下,引用是不同的。 在这里您可以找到实施规

  • 本文向大家介绍请编写一个对象obj满足 obj=='a' && obj=='b' && obj=='c'相关面试题,主要包含被问及请编写一个对象obj满足 obj=='a' && obj=='b' && obj=='c'时的应答技巧和注意事项,需要的朋友参考一下

  • 计算数组长度有一个众所周知的模式: 此模式适用于静态数组和恒定大小的自动数组。它也适用于C99中的可变长度数组。 我想应用类似的想法来计算动态数组的大小(以字节为单位): 这比 更好不是指实际的数组元素类型。因此,它不需要代码的读者知道类型。 然而,我不清楚表达式是否会导致未定义的行为。随着它的扩展: 如果为,则结果表达式有问题: 根据C99标准: (C99,6.3.2.3p3):“具有值 运算符

  • 我认为Integer(引用obj指向的)被解压缩为int,然后强制转换为byte,然后被压缩为byte并成功赋值。Eclipse编译器警告还说(稍微纠正一下): 类型Object的表达式解压缩为字节 类型byte的表达式被装箱为byte 那么为什么它不能将RHS中的这个字节分配到LHS中的字节引用中呢? 如果,则工作,但失败。失败,但没问题!也许在这些相互的差异中有一些线索? 从经验上看,我会说,

  • 怎么把数组arr转换成obj对象这种格式呢 我这样处理只能获取第一层数据

  • 问题内容: 我的老板说我应该使用,因为它比更好,但是他不记得为什么这样做。有什么理由要使用吗? 我以某种方式感觉到…相反! 在Google上进行搜索后,我发现的唯一结果是: 在C语言中,它可以防止您意外地在条件结构中键入(obj = null)。 问题答案: 您不能通过输入来意外分配给它。但是,这是C时代的回忆,在Java中是不可能的,因为表达式返回赋值的右侧。由于不是,编译器会抱怨。 我会尽力向