【问题标题】:What is the difference between giving character with quotes as key and just character as key of property of an object in javascript [duplicate]在javascript中将带有引号的字符作为键和仅将字符作为对象属性的键之间有什么区别[重复]
【发布时间】:2021-05-01 13:28:21
【问题描述】:
  1. const first= {a: 2, b: 3}

  2. const second= {"a": 2, "b": 3}

尽管上面给出的两个示例在控制台中打印的内容相同,但我无法以相同的方式访问这些对象的值。要访问first 对象的键,我必须写console.log( first.a ) 和第二个对象console.log( first[a] )

因此,如果它们打印相同,为什么我必须以不同的方式访问它们。如果first 对象中的键不是字符,那么它们是什么...

下面的代码是我得到这个问题的原因

const maxchar = (str)=>{
  let charCount = {}
  for (let index = 0; index < str.length; index++) {
    const char = str[index]
    charCount[char] = charCount[char]+ 1|| 1 //can't access char as charCount.char
  }
  return charCount
}

【问题讨论】:

  • 1.和 2. 相同 - 实际上没有区别。在这种情况下,引号是可选的。 first.afirst[a] 完全不同。第二个是dynamically access object property using variable,在这种情况下,变量是a。因此,取决于变量包含的内容。您的代码还通过变量进行动态访问,该对象上没有 .char 属性。关键是名为char变量 包含的任何内容。不过,我不清楚这与问题的开头有何关系。
  • 您正在尝试console.log(first[a])。您是说console.log(first['a'])(不是a 周围的引号)吗?
  • 我想你刚刚 搞定了, Thijs!(Show-of-有多少人一开始没有注意到a 是一个变量引用?是的,我举手了。)当你使用“点”表示法时,语言理解点后面的标识符指成员。但是当您使用“数组”表示法时,括号内的值是一个表达式,,其值必须与成员的名称匹配。 (很可能,JavaScript 在控制台日志中打印了一条错误消息,而 OP 没有注意到该消息,“并且一直保持正常运行”,就像 JS 一直做的那样。)

标签: javascript arrays string object ecmascript-6


【解决方案1】:

关于你的第一个问题:你的第一个和第二个例子没有区别。

第二个问题,我们来看这个小例子:

charCount = { a: 2, b:3 }
char = 'a'
print(charCount[char]) // 2
print(charCount.char) // error

正如评论中指出的,当您拨打charCount[char] 时,它会dynamically access object property using variable。它所做的只是简单地将变量char 替换为其当前值(在本例中为a)。所以,调用变成了charCount['a'],你就得到了结果。

当您调用charCount.char 时,它实际上会尝试访问对象charCount 的名为char 的属性。在这种情况下,该属性不存在,这就是出现错误的原因。

【讨论】:

    猜你喜欢
    • 2014-07-21
    • 2020-02-09
    • 2011-05-19
    • 1970-01-01
    • 2023-03-03
    • 2021-04-29
    • 1970-01-01
    • 1970-01-01
    • 2011-05-19
    相关资源
    最近更新 更多