जावास्क्रिप्ट Array
, और Object
के बीच का अंतर बहुत बड़ा नहीं है। वास्तव में ऐसा लगता है Array
मुख्य रूप से length
फ़ील्ड जुड़ जाता है, तो आप सांख्यिक सरणियों के रूप में दोनों Array
और Object
s का उपयोग कर सकते हैं:क्या जावास्क्रिप्ट Arrays वास्तव में सरणी के रूप में लागू किया गया है?
var ar = new Array();
ar[0] = "foo";
ar["bar"] = "foo";
var ob = new Object();
ob[0] = "foo";
ob["bar"] = "foo";
assert(ar[0] == ob[0] == ar["0"] == ob["0"] == ar.bar == ob.bar); // Should be true.
तो मेरे सवालों का है, लोकप्रिय जावास्क्रिप्ट इंजन में (वी 8, JavaScriptCore, Spidermonkey, आदि), यह कैसे संभाला जाता है? जाहिर है, हम नहीं चाहते हैं कि हमारे सरणी वास्तव में महत्वपूर्ण मूल्यों के साथ हैश मानचित्र के रूप में संग्रहीत हों! हम कैसे सुनिश्चित कर सकते हैं कि हमारा डेटा वास्तविक सरणी के रूप में संग्रहीत किया जा सके?
जहां तक मैं देख सकता हूँ वहाँ कुछ दृष्टिकोण हैं इंजन ले सकता है:
Array
Object
के रूप में ठीक उसी तरह कार्यान्वित किया जाता है - स्ट्रिंग कुंजी के साथ एक साहचर्य सरणी के रूप में।Array
Object
रूप में ही है एकstd::vector
तरह सरणी संख्यात्मक कुंजियों का समर्थन है, और कुछ घनत्व अनुमानी पागल स्मृति उपयोग करता है, तो आपar[100000000] = 0;
Array
करना रोकने के लिए के साथ एक विशेष मामला है, और सभी वस्तुओं को करने के लिए अनुमान प्राप्त देखें कि एक सरणी का उपयोग करने से अधिक समझ आएगी।- कुछ बेहद जटिल है कि मैंने सोचा नहीं है।
वाकई इस सरल अगर वहाँ एक उचित सरणी प्रकार (खांसी WebGL टाइप किया सरणियों खांसी) थे।
यह [आलेख] (http://news.qooxdoo.org/javascript-array-performance-oddities-characteristics) थोड़ा पुराना है, और यह स्पष्ट रूप से कार्यान्वयन की व्याख्या नहीं करता है। हालांकि, यह विस्तृत प्रदर्शन माप करता है, और संभावित कार्यान्वयन का अनुमान लगाता है। –
ऐरे _just_ एक नक्शा नहीं है जिस पर एक 'लम्बाई' संपत्ति है। यदि यह था, तो स्थानांतरित करना या छेड़छाड़ करना इंडेक्सिंग को तोड़ देगा (यानी।एक सरणी से एक मान को स्थानांतरित करें, और यह अभी भी इंडेक्स 0 पर शुरू होता है, न कि 1)। तो कम से कम थोड़ा और चल रहा है। (यह नहीं कि यह आवश्यक रूप से कार्यान्वयन के बारे में कुछ भी कहता है) – Flambino
आप 'आर [0] == ओबी [0] == आर ["0"] == ओबी ["0"] == ar की अपेक्षा क्यों करेंगे। बार == ob.bar' सच होने के लिए? '' a '==' a '==' a'' गलत है क्योंकि यह 'true == 'a' का मूल्यांकन करता है जो 'झूठी' का मूल्यांकन करता है। –