javascript - 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' ]
谢谢!
解决方案
obj.key
equalobj["key"]
将在您的对象中查找属性,显然object ==> equal is"key"
中没有key
属性。==> 你得到了意想不到的结果。animals
obj.key
obj["key"]
undefined
obj[key]
是动态地取值key
来传递符号。例如const key = "name"
=>obj[key]
相等obj.name
。在"bird"
你的情况下obj[key]
等于obj["bird"]
等于obj.bird
推荐阅读
- node.js - 使用node js制作带有图像的视频的最佳方法是什么
- javascript - React Element 类型无效:需要一个字符串(对于内置组件)或一个类/函数(对于复合组件)但得到:未定义
- ios - 尝试执行 pod install “[!] FBReactNativeSpec 已添加 1 个脚本阶段”时出现错误。
- javascript - 我该如何使用 setInterval 和 clearInterval ?
- java - 如何通过 Java 中的 JTable 中的默认程序打开文件
- c - 基本条件运算符
- javascript - 如何过滤和映射json文件到html?
- elasticsearch - 过滤日期直方图聚合的输出桶
- r - 如何在 R 的 xml2 包中找到与给定属性名称关联的 xpath
- jenkins - newman-reporter-htmlextra 报告与 Jenkins html 发布者未以 html 格式显示报告