javascript - 我对 JavaScript 中的对象感到很困惑

标签 javascript python object

我是 JavaScript 的新手,但我熟悉 Python。我想弄清楚 Python 中的字典和 JS 中的对象之间的区别。

据我所知,Python中字典中的key是需要提前定义的,而JS中的对象中可以是undefined。但是,我对这些情况感到困惑:

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 背后的机制吗?

最佳答案

当你赋值时:

var person = {n: 'mike'};

n 不是引用变量,而是它自己的属性。如果您需要引用变量,则需要使用方括号表示法,例如:

var person = {[n]: 'mike'};

有关括号表示法的更多信息,请参阅 computed property .

在 JavaScript 中,对属性使用 quote 与不使用 quote 相同:

var person = {n: 'mike'};
var person = {'n': 'mike'}; // same as above

但是如果你定义像给空间这样的属性:

var person = {my property: 'mike'}; // invalid

在这种情况下,您必须需要使用引号:

var person = {'my property': 'mike'};

关于javascript - 我对 JavaScript 中的对象感到很困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53454802/

相关文章:

c++ - 创建一个变量来保存不同类型的对象 C++

python - 如何去除尾随零的整数

python - 从 Pandas 数据透视表行中删除异常值

javascript - ngBootBox 回调函数不起作用(AngularJS)

javascript - 用 Jasmine 测试backbone.js应用程序-如何测试 View 上的模型绑定(bind)?

python - "RuntimeError: implement_array_function method already has a docstring"导入聊天机器人库时

具有相同名称的 Scala 对象和特征

javascript - 在 html <object> 中嵌入 dll

javascript - JScript运行时错误: '$' is undefined

javascript - 如果标记半径相互交叉,是否有可能不绘制标记?