【发布时间】:2021-05-01 13:28:21
【问题描述】:
-
const first= {a: 2, b: 3} -
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.a和first[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