2013-07-08 65 views
6

我用Node.js的v0.11.4與--harmony標誌的ECMAScript 6個符號和地圖玩。考慮以下。恢復屬性鍵/值

var a = Map(); 
a.set(Symbol(), 'Noise'); 

// Prints "1" 
console.log(a.size); 

能值'Noise'檢索給出的屬性標識由「匿名」符號鍵,這是保證是唯一的?

+0

我不知道泄漏,但你不能回值無裁判符號()的返回... – dandavis

+1

我不知道如何ES 6個符號的工作,但你不能枚舉一個對象? (for a(var key in a)alert(a [key]);' – jods

回答

5

這是不可能做到這一點的Node.js的,因爲在這個bug report表明V8的當前版本尚未實現迭代。

我們可以證實,通過查看V8的collection.js的源代碼:

InstallFunctions($Map.prototype, DONT_ENUM, $Array(
    "get", MapGet, 
    "set", MapSet, 
    "has", MapHas, 
    "delete", MapDelete, 
    "clear", MapClear 
)); 

但是,正如在ECMAScript 6 wiki可以看出,也應該有items()keys(),並values()。 v8可能之前沒有實現這些方法,因爲它不支持生成器。但現在it does今年5月份以來。在實施之前,應該只是一個時間問題。

如果您現在需要具備此功能,可以使用map-set-for-each,其中填充forEach。您將需要修改它case 'object':後添加case 'symbol':

a.forEach(function(value, key) { 
    if (value === 'Noise') { 
    console.log('Give mak the bounty'); 
    } 
}); 

當V8實現的Map迭代,你將能夠找到Noise這樣的:

for (let [key, value] of a) { 
    if (value === 'Noise') { 
    console.log('Upvotes for future'); 
    } 
}