2016-02-12 34 views
-3

當使用{}如下:的Javascript字典VS {}

var m = {}; 

則m是不具有字典的方法的對象。你可以看到通過粘貼到jsfiddle

var m = {}; 
m['a'] = 'x'; 
alert(m.keys()); 

這將不會運行 - 因爲keys()不是給定對象上的方法。那麼 - 如何獲得一個字典及其所有方法?

更新從@SLaks建議:原線更改爲

var m = new Map(); 

的伎倆

+4

沒有字典這樣的東西。或者你在問[[Map]類](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map)?這是一個普通的課程。 – SLaks

+1

你可以使用'Object.keys(m)'。 –

+0

@SLaks是的,我可能正在尋找一個地圖。請寫一個更詳細的答案。 – javadba

回答

1

有作爲在Javascript字典沒有這樣的事情。

您可以使用常規對象作爲字典,並像使用Object.keys()這樣的方法來幫助您。

如果您使用ES6(或polyfill),則可以使用Map class,這是一個具有get()set()方法的普通類。

+0

是的,將我原來的代碼更改爲'var m = Map();'就是訣竅。 – javadba

0

沒有「字典」,但在JavaScript對象可以以非常相似的使用在Java中使用Map方法。

var myObject = {} 
... 
for (var key in myObject) { 
    if (myObject.hasOwnProperty(key)) { 
     var value = myObject[key]; 
    } 
} 

的hasOwnProperty()的檢查是避免尋找鍵上漲的JavaScript prototype chain

1

{}是「對象字面量」。除object prototype(功能有限,如toString,hasOwnProperty等)的部分內容外,它沒有任何方法或屬性,以及您在其上定義的內容。否則它是空的,不會公開您期望的字典上的功能。這就是Object用武之地。

靜態Object基準上有一個API,你可以提供你的對象,有效地公開一組可以在你的對象,好像他們是默認的方法進行功能一個「字典」可能會暴露。

var m = {}; 
m.a = 'x'; 

Object.keys(m) // => ['a'] 

您可以找到Object支持在MDN更多的方法,https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object

+0

您的第一段有誤導性。 – Marty

+0

@Marty你發現我可以澄清的誤導性是什麼? – Atticus

+0

說一個對象是完全空的,沒有任何屬性或方法是有點真實的,它只是以一種暗示'。hasOwnProperty'和'.prototype'這樣的東西不存在的方式讀取。 – Marty