Javascript Dot符号与Bracket表示法

时间:2018-05-29 18:48:17

标签: javascript brackets notation

当我使用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”

4 个答案:

答案 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"]