这个javascript对象数组如何工作?

时间:2011-10-21 13:24:07

标签: javascript javascript-objects

我想要了解一些非常基本的东西。如果我有这样的对象:

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"];

请有人澄清一下吗?

6 个答案:

答案 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"语法

enter image description here

答案 5 :(得分:1)

如果您的代码未导致ReferenceError,则您可能已在全局范围内拥有名为name的变量,并创建了name内容的新属性。< / p>