JavaScript中for循环中object.key和object[key]之间的差异
为什么在我将if-typeof-obj[key]==“object”替换为if-typeof-obj.key==“object”后,结果不符合预期。 这是我的代码: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
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时,它会在对象内查找名为“”的属性。但是没有一个有这个名字!更多信息: