我想要了解一些非常基本的东西。如果我有这样的对象:
var topics = {}
我这样做:
topics[name] = ["chapter 1", "chapter 2", "chapter 3"];
当我记录这个对象时,我没有看到name属性。我到底做了什么?我是否创建了一个名为name的键,其值为数组?
当然我知道我可以做到这一点
topics.name = ["chapter 1", "chapter 2", "chapter 3"];
但那是做什么的呢?
topics[name] = ["chapter 1", "chapter 2", "chapter 3"];
请有人澄清一下吗?
答案 0 :(得分:3)
您正在对象上创建一个属性,其名称基于name
变量的值。如果要以这种方式创建名为name的属性,则需要执行以下操作:
topics["name"] = ["chapter 1", "chapter 2", "chapter 3"];
答案 1 :(得分:3)
当您使用[]
表示法时,它需要一个表达式,它将转换为字符串。
使用未在引号name
中使用的'name'
,它假设您使用名为name的变量。
在您的情况下,undefined
。
正确的用法是
topics["name"] = ["chapter 1", "chapter 2", "chapter 3"];
如果您想使用变量,您可以执行
之类的操作var prop = 'name';
var topics = {};
topics[prop] = ["chapter 1", "chapter 2", "chapter 3"];
这将在对象上创建name
属性..对动态/自动创建/填充对象很有用..
答案 2 :(得分:3)
这应该会产生错误,除非您将变量name
定义为字符串或数字。
这三个是等价的:
var name = "key";
topics[name] = "value";
topics["key"] = "value";
topics.key = "value";
答案 3 :(得分:2)
通常有三种方法可以区分:
topics.name
topics["name"]
topics[name]
前两个是等价的。因此,.xxx
代表文字键xxx
,["xxx"]
也是如此。
最后一个将使用name
变量包含的任何内容。 E.g:
var name = "test";
topics[name] = 123; // topics["test"] now exists
答案 4 :(得分:2)
在以下屏幕截图中可以看到生成的结构。如mck89所述,您可能希望使用"name"
语法
答案 5 :(得分:1)
如果您的代码未导致ReferenceError
,则您可能已在全局范围内拥有名为name
的变量,并创建了name
内容的新属性。< / p>