【问题标题】:Javascript Dot Notation vs Bracket Notation [duplicate]Javascript点表示法与括号表示法[重复]
【发布时间】:2018-05-29 18:48:16
【问题描述】:

我试图弄清楚为什么当我使用dot notation 时控制台打印undefined,而当我使用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])
}

未定义
未定义
未定义
未定义
未定义
“牧师”
“计算”
“鸟法”
“鸟”
“疣猪”

【问题讨论】:

标签: javascript brackets notation


【解决方案1】:
for(var key in sunny){
  console.log(sunny.key)
}

括号符号中的sunny.key 等价于sunny["key"]。它正在搜索对象中不存在的属性名称“键”。因此总是返回未定义。

这里的key其实是变量,不是用来提取属性值的字符串。

见:https://codeburst.io/javascript-quickie-dot-notation-vs-bracket-notation-333641c0f781

【讨论】:

    【解决方案2】:

    当您编写sunny.key 时,您正在访问实例sunny 上名为key 的属性/字段;注意,这与名为key 的变量完全无关。 sunny.key 在您的示例中等效于 sunny["key"] NOT sunny[key]。当您编写sunny[key] 时,您是在告诉解释器在运行时获取变量key 的值,然后访问名称等于key 的成员时间。

    sunny.key 中的key 是一个标识符,循环的迭代器变量是一个变量。这是两个不同的实体,语言规则决定了您在每种情况下的实际意思。

    应用于变量的操作符.是一个成员访问器,后面的任何东西都将是一个标识符

    【讨论】:

      【解决方案3】:

      正如Geek先生在评论中所说,sunny.key这里本质上是寻找sunny的一个属性被调用。键,未定义 如果事情可以这样工作,那么这样的代码也可以工作

      Var something = { "Foo" : 123 };
      Var key = "Foo";
      Console.log(something.key)
      

      我想这个例子很容易理解。以及为什么这不起作用或不应该起作用

      【讨论】:

        【解决方案4】:

        循环中的键是一个属性,它保存了对象的每个键。

        所以当您尝试sunny.key 时,它实际上是在寻找属性名称key

        当你说sunny[key] 键是用循环运行的对象的属性提取的。所以这个符号是有效的。

        换句话说,sunny.key 等于 sunny["key"]

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2014-01-11
          • 1970-01-01
          • 1970-01-01
          • 2017-02-24
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多