JavaScript 中的这个东西是什么?

9

考虑:

var something = {

    wtf: null,
    omg: null
};

自从上次使用JavaScript编程以来,我的JavaScript知识仍然非常零散,但我认为现在已经重新学习了大部分内容。除了这个。我不记得以前见过这个。这是什么?我在哪里可以了解更多信息?


现在这个问题已经得到解答,我可以补充一下,AppJet有一个简单的JavaScript教程,“对象”这一课讲得非常好: http://appjet.com/learn-to-program/lessons/objects - Joe Pineda
8个回答

17

哦,我明白了。所以,根据链接,一个字符串就像""或'',就像一个对象就像{}?不确定这是否是最好的描述方式,但我现在明白了。谢谢。 - Daddy Warbox
链接已损坏:“页面未找到” - Peter Mortensen

11

这是一个包含两个属性的对象字面量。通常人们会这样创建关联数组或哈希表,因为 JavaScript 并没有本地支持此数据结构。不过要注意,它仍然是一个完整的对象,你甚至可以将函数作为属性添加进去:

var myobj = {
    name: 'SO',
    hello: function() {
        alert(this.name);
    }
};

您可以使用 for 循环迭代属性:

for (i in myobj) {
    // myobj[i]
    // Using the brackets (myobj['name']) is the same as using a dot (myobj.name)
}

JavaScript不支持关联数组/哈希表吗?我会认为在JavaScript中一切都是关联数组/哈希表。 - Glenn Moss
关于“人们如何创建关联数组或哈希表”的问题:但是键有一些限制,例如保留字? - Peter Mortensen

6

从“我想在JavaScript中使用关联数组”的角度来解释(这也是许多情况下对象字面量被用于的目的)

来自"精通JavaScript数组"

关联数组是一种使用字符串而不是数字作为索引的数组。

var normalArray    = [];
    normalArray[1] = 'This is an enumerated array';

    alert(normalArray[1]);   // outputs: This is an enumerated array

var associativeArray           = [];
    associativeArray['person'] = 'John Smith';

    alert(associativeArray['person']); // outputs: John Smith

JavaScript没有关联数组的概念和支持。然而,JavaScript中的所有数组都是对象,而JavaScript的对象语法提供了基本的关联数组模拟。因此,上面的示例代码实际上可以工作。请注意,这不是一个真正的数组,如果您尝试使用它,它会有真正的缺陷。例如,示例中的'person'元素成为Array对象的属性和方法的一部分,就像.length、.sort()、.splice()和所有其他内置属性和方法一样。

您可以使用以下循环遍历对象的属性...

var associativeArray = [];
associativeArray["one"] = "First";
associativeArray["two"] = "Second";
associativeArray["three"] = "Third";
for (i in associativeArray) {
   document.writeln(i+':'+associativeArray[i]+', ');
   // outputs: one:First, two:Second, three:Third
};

在上面的例子中,associativeArray.length将为零,因为我们实际上没有将任何内容放入数组中,而是将其放入了associativeArray的对象中。associativeArray [0]将未定义。
上面的循环还将捕获添加到数组中的任何方法、属性和原型,而不仅仅是您的数据。许多人在使用Prototype库时遇到的问题是,它们的关联数组会出错,因为Prototype向Array对象添加了一些有用的原型函数,并且for i in x循环会捕获这些附加方法。这就是将数组/对象用作贫民关联数组的缺陷。
最后一个例子,无论您将associativeArray定义为数组([])、对象({})、正则表达式(//)、字符串("")或任何其他JavaScript对象,上述代码都可以工作。
底线是——不要尝试使用关联数组,编写针对它们的代码——对象属性,而不是数组。

链接已损坏(超时)。 - Peter Mortensen

5

这是一个对象字面量(或者在带有哈希类库的情况下,有时也称为原始对象)。

它与以下内容相同:

var o = new Object();
o.wtf = null;
o.omg = null;

4

这是一个对象字面量。它与以下内容等效:

var something = new Object();
something["wtf"] = null;
something["omg"] = null;

2
我相信这是一个具有两个属性的对象,分别是 wtfomg
你可以这样说
something.wtf = "myMessage";
alert(something.wtf);

请查看 json.org


1

这段代码:

var something = {wtf:null}

具有相同的效果:

var something={};
something.wtf=null;

或者为了不必要的冗长:

var something=new Object();
something.wtf=null;

还值得记住的是,最后一行与以下内容相同:

something["wtf"]=null;

所以你可以使用:

var myName="wtf";
something[myName]=null;

0

这是内联JavaScript对象实例化的示例。


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