当我使用undefined
时,为什么在我使用dot notation
时打印每个键的值时,我试图找出控制台打印bracket notation
的原因。
我想要的是打印每个键的值,所以我使用括号表示法。我只是想知道为什么点符号不起作用。
以下是示例。
const sunny = { mac: 'priest', dennis: 'calculating', charlie: 'birdlaw', dee: 'bird', frank: 'warthog' };
for(var key in sunny){
console.log(sunny.key)
}
for(var key in sunny){
console.log(sunny[key])
}
未定义
未定义
未定义
未定义
未定义
“牧师”
“计算”
“birdlaw”
“鸟”
“warthog”
答案 0 :(得分:4)
for(var key in sunny){
console.log(sunny.key)
}
sunny.key括号表示法相当于晴天["键"]。它正在搜索一个属性名称" key"你的对象中没有.Hence总是返回undefined。
这里的键实际上是变量,而不是提取属性值的字符串。
请参阅:https://codeburst.io/javascript-quickie-dot-notation-vs-bracket-notation-333641c0f781
答案 1 :(得分:1)
当您编写sunny.key
时,您正在访问实例key
上名为sunny
的属性/字段;注意,这与名为key
的变量完全无关。您的示例中的sunny.key
相当于sunny["key"]
NOT sunny[key]
。当您编写sunny[key]
时,您告诉解释器在运行时获取变量key
的值,然后访问名称等于值的成员key
当时。
key
中的sunny.key
是标识符,循环的迭代器变量是变量。这是两个不同的实体,语言规则决定了您在每个上下文中实际意味着哪一个。
应用于变量的运算符.
是成员访问者,此后的任何内容都将是标识符。< / p>
答案 2 :(得分:0)
正如Geek先生在评论中所说的那样,sunny.key在这里实质上是在寻找一个被称为阳光的属性。键,未定义 如果事情可以这样工作,那么像这样的代码也可以用于前
Var something = { "Foo" : 123 };
Var key = "Foo";
Console.log(something.key)
我想这个例子很容易理解。为什么那些没有用或者不应该工作
答案 3 :(得分:0)
在循环键中是一个保存Object的每个键的属性。
所以当您尝试sunny.key
时,它实际上是在寻找属性名称key
。
当你说sunny[key]
密钥被提取时,对象的属性在循环中运行。所以这种符号有效。
换句话说,sunny.key
等于sunny["key"]