我对 JavaScript 中的对象感到非常困惑
我是 JavaScript 的新手,但我熟悉 Python。我正在尝试弄清楚 Python 中的字典和 JS 中的对象之间的区别。
据我所知,Python 中字典的键需要提前定义,但在 JS 的对象中可以未定义。然而,我对以下这些情况感到困惑:
var n = 'name';
var n2 = n;
var person = {n: 'mike'};
person.n # 'mike'
person['n'] # 'mike'
person[n2] # undefined
person.n2 # undefined
person['name'] # undefined
person.'name' # undefined
我非常困惑,为什么那三个变量 n、n2 和 name 不相等,因为与 Python 中的情况相比:
n = 'name'
n2 = n
person = {n:'mike'}
person[n] # 'mike'
person[n2] # 'mike'
person['name'] # 'mike'
我猜这可能是因为在 Python 中,n 和 n2 都指向唯一的字符串对象 'name',所以它们是相同的。但有人能给我解释一下在 JS 中背后的机制吗?
答案#1
当你像这样分配时:
var person = {n: 'mike'};
n 不是引用变量,而是引用它自己的属性。如果你需要引用变量,你需要使用括号表示法,如下所示:
var person = {[n]: 'mike'};
有关括号符号的更多信息,请参见计算属性。
在 JavaScript 中,为属性使用引号与不使用引号是相同的:
var person = {n: 'mike'};
var person = {'n': 'mike'}; // same as above
但是如果你像设置间距那样定义属性:
var person = {my property: 'mike'}; // invalid
在这种情况下,你必须使用引用:
var person = {'my property': 'mike'};
