Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/477.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript中for循环中object.key和object[key]之间的差异_Javascript_Loops - Fatal编程技术网

JavaScript中for循环中object.key和object[key]之间的差异

JavaScript中for循环中object.key和object[key]之间的差异,javascript,loops,Javascript,Loops,为什么在我将if-typeof-obj[key]==“object”替换为if-typeof-obj.key==“object”后,结果不符合预期。 这是我的代码: var animals = { bird: { color: 'blue', action: { fly: true, nesting: true, swim:false }, eat:'insect' } }; function GetObjectKeys

为什么在我将if-typeof-obj[key]==“object”替换为if-typeof-obj.key==“object”后,结果不符合预期。 这是我的代码:

var animals = {
  bird: {
    color: 'blue',
    action: {
      fly: true,
      nesting: true,
      swim:false
    },
    eat:'insect'
  }
};
function GetObjectKeys(obj, keys) {
 for (let key in obj) {
     //if (typeof obj.key == 'object')
       if (typeof obj[key] == 'object') 
  {
           keys.push(key);
           GetObjectKeys(obj[key], keys);
       } 
else {
           keys.push(key);
       }
   }
   return keys;
}
arrKeys = [];
GetObjectKeys(animals, arrKeys); 

//
- result expect:
[
  'bird',    'color',
  'action',  'fly',
  'nesting', 'swim',
  'eat'
]
- result when use if (typeof obj.key == 'object') :
[ 'bird' ]
谢谢大家!

点符号exampleobj.key上的键是一个字符串,您的obj没有名为key的属性,因此它是未定义的

您正在用括号表示法传入一个变量,因为let key in obj循环对象obj中的所有属性名。因此,obj[key]基本上等于第一次函数调用时的obj['bird'.

点符号exampleobj.key上的键是一个字符串,您的obj没有名为key的属性,因此它是未定义的

您正在用括号表示法传入一个变量,因为let key in obj循环对象obj中的所有属性名。所以obj[key]基本上等于第一次函数调用时的obj['bird'] 在我看来,当您在表达式中使用for…时,key就是字符串类型的key。像键1,键2,键3'

所以,当您使用像obj.key这样的键时,它就像obj.key。所以它发生了一些错误

因此,您可以使用动态属性键,如obj[key]

参考 答复 在我看来,当您在表达式中使用for…时,key就是字符串类型的key。像键1,键2,键3'

所以,当您使用像obj.key这样的键时,它就像obj.key。所以它发生了一些错误

因此,您可以使用动态属性键,如obj[key]

参考
使用obj[key]更适合这种类型的使用。看这里:

var obj = {key: 1, key2: 2}
var key = 'key2';

obj.key = 3;
obj[key] = 4; // result: {key: 3, key2: 4}

使用obj[key]更适合这种类型的使用。看这里:

var obj = {key: 1, key2: 2}
var key = 'key2';

obj.key = 3;
obj[key] = 4; // result: {key: 3, key2: 4}
obj.key equal obj[key]将在对象中查找key作为属性,显然,在动物对象中没有key属性==>obj.key equal obj[key]未定义。==>你得到了意想不到的结果。 obj[key]是动态地获取key的值,以便在表示法中传递。例如const key=name=>obj[key]等于obj.name。在你的情况下,这是鸟 obj.key equal obj[key]将在对象中查找key作为属性,显然,在动物对象中没有key属性==>obj.key equal obj[key]未定义。==>你得到了意想不到的结果。 obj[key]是动态地获取key的值,以便在表示法中传递。例如const key=name=>obj[key]等于obj.name。在你的情况下,这是鸟
欢迎来到StackOverflow!您需要将您看到的结果粘贴到这里,然后再粘贴您希望看到的结果。这将帮助我们确定您正在尝试执行的操作。当您使用obj.keys时,它会在对象内查找名为“”的属性。但是没有一个有这个名字!更多信息:欢迎来到StackOverflow!您需要将您看到的结果粘贴到这里,然后再粘贴您希望看到的结果。这将帮助我们确定您正在尝试执行的操作。当您使用obj.keys时,它会在对象内查找名为“”的属性。但是没有一个有这个名字!更多信息: