我是JavaScript的新手,但我熟悉Python。我试图弄清楚Python中的Dictionary和JS中的Object之间的区别。
据我所知,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背后的机制吗?
答案 0 :(得分:6)
当您分配类似时:
var person = {n: 'mike'};
n不是引用变量,而是它自己的属性。如果您需要引用变量,则需要使用方括号表示法,例如:
var person = {[n]: 'mike'};
有关方括号符号的更多信息,请参见computed property。
在JavaScript中,对属性使用引号的方式相同,但不使用引号:
var person = {n: 'mike'};
var person = {'n': 'mike'}; // same as above
但是,如果您定义属性,例如给空格:
var person = {my property: 'mike'}; // invalid
在这种情况下,您必须使用引号:
var person = {'my property': 'mike'};