新手:对象还是哈希?

时间:2011-12-18 18:48:31

标签: javascript terminology

如果我定义如下内容:

var groups={
   'group_one': ['red','green','blue'],
   'group_two': ['yellow','black'],
   'group_three': ['white', 'pink','purple','orange']
}

是正常的js 对象还是哈希表?如果它不是哈希表,那么Javascript 哈希表的外观如何?

我可以通过以下方式访问群组:

my_group=groups['group_two']

4 个答案:

答案 0 :(得分:2)

这是一个对象,这就是specification引用它的方式。 对象是JavaScript中的数据类型

hash table [Wikipedia]数据结构,您可以使用它,但它不能很好地处理重复的键(它只是覆盖了条目)。您可以提供自己的实现,例如查看Hash Map implementation from the Google Closure Library

答案 1 :(得分:1)

您的groups变量指的是一个完全正常的对象,它与所有普通的javascript对象一样,是将属性名称映射到属性值的关联数组。这些通常作为哈希表实现。

答案 2 :(得分:0)

据我所知,JavaScript没有这样的哈希表。你有很好的旧的从零数字数组:

var a = ["foo", "bar"];
alert(a[0]); // "foo"

......你有对象:

var b = {
    x: "foo",
    y: "bar
};
alert(b.x); // "foo"

数组按键排序,不能有间隙。对象未排序。他们分享方括号语法:

alert(a[0]);
alert(b[x]); // same as b.x

我认为JavaScript引擎在内部大量使用哈希表,但JavaScript引擎通常不用JavaScript编写; - )

答案 3 :(得分:0)

如果您想要哈希表的典型功能,在那里提供密钥和数据,然后可以通过提供密钥来获取数据,那么javascript对象使用对象上的属性提供该功能。

javascript引擎的内部是一个属性查找算法,用于可能类似于哈希表的对象(尽管特定的实现并不重要,因为它具有适当的功能)。

该语言中没有单独的哈希表。一个可以实现,但很少有一点,因为对象通常提供所需的东西。

在您的数据中:

var groups= {
   'group_one': ['red','green','blue'],
   'group_two': ['yellow','black'],
   'group_three': ['white', 'pink','purple','orange']
}

您可以使用以下方式访问数据:

groups.group_one

groups['group_one']

两者都将评估为:

['red','green','blue']