डॉक्स की मेरी समझ (here और here) के आधार पर यह काम करने के लिए एक स्मृति पते के लिए एक संदर्भ की आवश्यकता होगी:कैसे ES6 मानचित्र की परतें काम करते हो
const foo = {};
const map = new Map();
map.set(foo,'123'); // Can only be done if memory address of `foo` is known. Any other shimming would require stringification of foo
इसका कारण यह है जावास्क्रिप्ट वस्तु {}
कुंजी केवल तार हो सकते हैं (कम से कम ES5 में)।
फिर भी मुझे Map
शिम उपलब्ध है: https://github.com/zloirock/core-js#map। मैं स्रोत पढ़ने की कोशिश की, लेकिन इसके भी बड़े करीने से निकाला (internally का उपयोग करता strong collection which then imports 10 more files)
प्रश्न
उत्तर कृपया निम्नलिखित
- के किसी भी वहाँ यह करने के लिए एक सरल चाल है और यह सही मायने में भी किया जा सकता है (स्ट्रिंग के बिना)?
- शायद यह
foo
पर कुछ स्ट्रिंग स्टोर करने के लिए mutates और फिर उस कुंजी के रूप में उपयोग करता है? - कुछ और शायद मैं दस्तावेज़ों को गलत पढ़ रहा हूं?
मुझे पूरा यकीन है कि शिम्स ऑब्जेक्ट पहचान की तुलना करने के लिए बस '===' का उपयोग करते हैं, और ओ (1) या ओ (लॉग (एन)) संचालन के बजाय कई ओ (एन) संचालन के लिए है कि देशी कार्यान्वयन हो सकता है। –
ES2015 'मानचित्र' को सही ढंग से नहीं बदला जा सकता है, मेरा मानना है कि निकटतम इम्प्लांटेशन कुंजी के रिकॉर्ड, कुछ प्रकार के पुनरावृत्ति, और ऑब्जेक्ट्स के साथ नियमित तुलना करना होगा, क्योंकि जेरेमी भी उल्लेख करता है। – adeneo
[यहां है] (https://cloud.github.com/downloads/eriwen/es6-map-shim/es6-map-shim-0.2।जेएस) एक पठनीय पॉलीफिल बीटीडब्ल्यू – adeneo