新手:对象或散列

Newbie: object or hash?

本文关键字:对象 新手      更新时间:2023-09-26

如果我定义如下内容:

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

它是一个正常的js 对象还是一个哈希表?如果它不是哈希表,那么Javascript 哈希表是什么样子的?

我可以访问一个组:

my_group=groups['group_two']

它是一个对象,这就是规范所指的它。对象是JavaScript中的数据类型

哈希表 [Wikipedia] 是一个数据结构,您可以使用对象,但它不能很好地处理重复键(它只是覆盖条目)。您可以提供自己的实现,例如,看看来自Google Closure Library的Hash Map实现。

您的groups变量引用了一个完全正常的对象,它像所有正常的javascript对象一样是将属性名称映射到属性值的关联数组。

据我所知,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编写的;-)

如果你想要哈希表的典型功能,在这里你提供一个键和数据,然后你可以通过提供键来获得数据,那么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']