首页 > 解决方案 > JavaScript for 循环中 object.key 和 object[key] 的区别

问题描述

为什么我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' ]

谢谢!

标签: javascriptloops

解决方案


  • obj.keyequalobj["key"]将在您的对象中查找属性,显然object ==> equal is"key"中没有key属性。==> 你得到了意想不到的结果。animalsobj.keyobj["key"]undefined
  • obj[key]是动态地取值key来传递符号。例如const key = "name"=>obj[key]相等obj.name。在"bird"你的情况下obj[key]等于obj["bird"]等于obj.bird

推荐阅读