मैं अत्यधिक संसाधन-बाधित एम्बेडेड डिवाइस (http://www.espruino.com) के लिए एक जावास्क्रिप्ट दुभाषिया लिख रहा हूं, और हर बार जब मुझे लगता है कि मैंने कुछ जावास्क्रिप्ट सही तरीके से कार्यान्वित किया है, तो मुझे एहसास है कि मैं गलत हूं।जावास्क्रिप्ट [] वास्तव में कैसे काम करता है?
मेरा प्रश्न अब []
है। आप जावास्क्रिप्ट के सबसे बुनियादी बिट्स में से एक को सही ढंग से कैसे कार्यान्वित करेंगे?
मैंने जावास्क्रिप्ट स्पेक को देखा है और शायद मुझे सही नहीं मिला है, लेकिन मुझे एक उपयोगी उत्तर नहीं मिल रहा है।
मैंने पहले माना था कि आपके पास प्रभावी रूप से दो 'मानचित्र' थे - एक पूर्णांक के लिए, और तारों के लिए एक। और सरणी लंबाई उच्चतम पूर्णांक प्लस वन का मान था। हालांकि यह गलत लगता है, क्रोम पर jsconsole के अनुसार:
var a = [];
a[5] = 42;
a["5"]; // 42
a.length; // 6
लेकिन यह भी:
var a = [];
a["5"] = 42;
a[5]; // 42
a.length; // 6
तो ... महान - सब कुछ एक स्ट्रिंग में, बदल जाती है और उच्चतम मूल्य का स्ट्रिंग कि एक पूर्णांक का प्रतिनिधित्व करता है लंबाई प्राप्त करने के लिए (प्लस वन) का उपयोग किया जाता है? गलत।
var a = [];
a["05"] = 42;
a.length; // 0
"05"
एक वैध पूर्णांक है - यहां तक कि ऑक्टल में भी। तो यह लंबाई को प्रभावित क्यों नहीं करता है?
क्या आपको स्ट्रिंग को एक पूर्णांक में परिवर्तित करना है, और तब जांचें कि स्ट्रिंग में वापस परिवर्तित होने पर, यह मेल खाता है?
क्या किसी के पास किसी एरे या ऑब्जेक्ट में आइटम स्टोर करने और प्राप्त करने के लिए उपयोग किए जाने वाले सटीक एल्गोरिदम का संदर्भ है? ऐसा लगता है कि यह बहुत आसान होना चाहिए, लेकिन ऐसा लगता है कि वास्तव में यह नहीं है!
[मानक] (http://www.ecma-international.org/ecma-262/5.1/#sec-15.4) कहता है: "* एक संपत्ति का नाम' पी' ('स्ट्रिंग 'के रूप में मान) एक सरणी अनुक्रमणिका है यदि केवल तभी 'ToString (ToUint32 (P)) '' 'के बराबर है और' ToUint32 (P) '' ** ** 32-1' के बराबर नहीं है। * "। – DCoder
यदि आप एक दुभाषिया लिख रहे हैं, तो धारणाओं का उपयोग नहीं किया जाना चाहिए। आपको कल्पना पढ़ना चाहिए। –
आप वी 8 की तरह मौजूदा, शक्तिशाली और मानक-अनुरूप जेएस कार्यान्वयन का उपयोग क्यों नहीं करते? मैंने जो पढ़ा है http://www.espruino.com/Performance पर भयानक लग रहा था: -/ – Bergi