2011-12-18 46 views
1

如果我定義類似如下:新手:對象還是哈希?

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

它是一個正常的js 對象哈希表?如果它不是一個哈希表,然後如何JavaScript的哈希表什麼樣子的?

我可以通過訪問一組:

my_group=groups['group_two']

+2

它是javascript中的一個對象。不知道JavaScript是否使用哈希表來實現它。 – 2011-12-18 18:49:47

+0

javascript – 2011-12-18 18:50:18

+0

中哈希表的格式與對象符號相同。有些人會稱它爲關聯數組(但要小心,沒有長度屬性來說明「數組」的長度)。 – 2011-12-18 18:57:28

回答

1

groups變量是指一種完全正常的對象,它像所有正常javascript對象是映射屬性名稱的屬性值關聯數組。這些通常是作爲引擎蓋下的哈希表來實現的。

2

這是一個對象,這就是specification如何引用它。一個對象是在JavaScript中數據類型

A hash table[Wikipedia]是一個數據結構您可以使用它的對象,但它不能很好地處理重複的鍵(它只是覆蓋條目)。你可以提供你自己的實現,例如看看Hash Map implementation from the Google Closure Library

+0

Google的哈希映射只是使用一個對象來存儲和獲取數據。 – jfriend00 2011-12-18 19:08:02

+0

那麼,最終任何實現都可能使用對象作爲存儲......但在查看源代碼之後,它也不處理重複鍵。它仍然是一個實現的例子;) – 2011-12-18 19:13:22

+0

這聽起來像你冒犯了。我的評論不是這個意思。我只想表明Google的哈希表實現說明javascript對象具有不允許重複鍵的哈希表的查找機制所需的內容。 – jfriend00 2011-12-18 19:18:15

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編寫;-)

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']