我对JavaScript中的对象感到非常困惑。

6

我是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, n2name 不相等,因为与 Python 中的比较:

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

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

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

1个回答

6
当你像这样分配:
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'};

3
我猜在Python中,与Javascript的{n: "mike"}相当的是{"n": "mike"} - Thilo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接