我对JavaScript中的Object感到困惑

时间:2018-11-24 03:00:49

标签: javascript python object

我是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

我很困惑,为什么这三个变量nn2name不相等,因为与Python中的变量相比:

n = 'name'
n2 = n
person = {n:'mike'}

person[n]  # 'mike'
person[n2] # 'mike'
person['name'] # 'mike'

我想这可能是由于在Python中nn2都指向唯一的字符串对象'name',所以它们是相同的。但是有人可以向我解释JS背后的机制吗?

1 个答案:

答案 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'};