2011-08-30 20 views
5

मुझे यकीन नहीं है कि जावास्क्रिप्ट इंजन (विशेष रूप से ब्राउज़र इंजन) एक सरणी कैसे संग्रहीत करते हैं।जावास्क्रिप्ट ऐरे इंडेक्स मूलभूत

उदाहरण के लिए - यह कितनी मेमोरी का उपयोग करेगा?

var x = new Array(0, 1, 2, 1000, 100000000); 

मैं सरणी अनुक्रमित के रूप में पूर्णांक दिनांकों मैप करना चाहते हैं, लेकिन मैं इसे एक बुरा विचार नहीं है सुनिश्चित करने के लिए की जरूरत है।

उत्तर

11

सरणी केवल कई तरह से "विशेष" कर रहे हैं:

  • वे अपने प्रोटोटाइप ("टुकड़ा()" आदि)
  • वे मिल गया है से कुछ दिलचस्प सरणी की तरह तरीकों मिल गया है एक "जादू" length संपत्ति सबसे बड़ा संख्यात्मक संपत्ति "नाम"

यदि आप एक नया सरणी में स्थिति 10,299,123 पर कुछ स्टोर पटरियों कि, क्रम अपने सभी स्मृति एक वास्तविक, खाली सरणी का आवंटन अप का उपयोग नहीं करता। इसके बजाय, यह भंडार जो भी आप संग्रहीत करना चाहते हैं और सुनिश्चित करें कि length 10299124.

अब समस्या विशेष रूप से तारीखों के साथ करने के लिए अद्यतन किया जाता है बनाता है, यदि आप टाइमस्टैम्प संग्रहीत करने के बारे में बात कर रहे है, (मैं लगता ) है कि वे ' 32-बिट पूर्णांक से बड़ा है। ऐरे इंडेक्स उस आकार तक ही सीमित हैं। हालांकि, इसका मतलब यह है कि length सही नहीं होगा।

var dateStorage = {}; 

dateStorage[someDate.getTime()] = "whatever"; 

JavaScript ऑब्जेक्ट के नाम-मान के रूप में इस्तेमाल किया जा सकता जब तक कि नाम दर्शाया जा सकता है नक्शे: तुम सच में वैसे भी सरणी सामान में से किसी की परवाह नहीं करते हैं, तो वास्तव में आप सभी की जरूरत एक सादे वस्तु है एक स्ट्रिंग के रूप में (जो संख्याओं के लिए स्पष्ट रूप से सच है)।

+0

यह एक अच्छा जवाब था। –

+0

धन्यवाद। मैं जेएस में ऐरे स्टोरेज के बारे में अधिक तकनीकीताओं के साथ एक प्रतिक्रिया का आनंद लेंगे। यूनिक्स टाइमस्टैम्प 32 बिट पूर्णांक हैं। –

+1

जावास्क्रिप्ट संख्यात्मक प्रकारों का विषय बहुत अजीब और जटिल है। ईसीएमए मानक दस्तावेज लंबा और थकाऊ है, लेकिन भाषा अर्थशास्त्र के विवरण में स्पष्ट रूप से स्पष्ट (यदि विस्तृत रूप से विस्तृत किया गया है) है। विशेष रूप से ऐरे विवरण, मेरे लिए, बहुत सरल हैं। – Pointy

संबंधित मुद्दे