6
我用Node.js的v0.11.4與--harmony
標誌的ECMAScript 6個符號和地圖玩。考慮以下。恢復屬性鍵/值
var a = Map();
a.set(Symbol(), 'Noise');
// Prints "1"
console.log(a.size);
能值'Noise'
檢索給出的屬性標識由「匿名」符號鍵,這是保證是唯一的?
我用Node.js的v0.11.4與--harmony
標誌的ECMAScript 6個符號和地圖玩。考慮以下。恢復屬性鍵/值
var a = Map();
a.set(Symbol(), 'Noise');
// Prints "1"
console.log(a.size);
能值'Noise'
檢索給出的屬性標識由「匿名」符號鍵,這是保證是唯一的?
這是不可能做到這一點的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');
}
}
我不知道泄漏,但你不能回值無裁判符號()的返回... – dandavis
我不知道如何ES 6個符號的工作,但你不能枚舉一個對象? (for a(var key in a)alert(a [key]);' – jods