10

ईसीएमए मानक का हिस्सा मेरा मानना ​​है कि ऑब्जेक्ट्स सरणी जैसी होने पर जावास्क्रिप्ट कंसोल ऑरे के रूप में ऑब्जेक्ट्स प्रदर्शित करेगा।Google क्रोम कंसोल सरणी जैसी ऑब्जेक्ट्स को सही ढंग से प्रदर्शित नहीं कर रहा है जब उनके इंडेक्सर्स आधारित/सेट आधारित हैं?

जैसे: ["हैलो", "दुनिया"] किसी ऑब्जेक्ट के लिए जो संख्यात्मक रूप से अनुक्रमित होता है।

ऐरे-जैसे व्यवहार को एक लंबी संपत्ति के रूप में परिभाषित किया गया है और ऑब्जेक्ट पर एक स्प्लिस विधि मौजूद है, साथ ही संख्यात्मक रूप से अनुक्रमित गुण भी मौजूद हैं।

हम में से कई ने शायद इसे अतीत में jQuery के साथ देखा है।

मैं इस व्यवहार का लाभ उठाने की कोशिश कर रहा हूं और इसे वांछनीय मानता हूं। हालांकि मेरे पास अतिरिक्त आवश्यकता है कि मेरे इंडेक्स उन्हें सेट करने के लिए गेटर्स/सेटर्स का उपयोग करें ताकि जब वे संशोधित हों तो मैं कुछ अतिरिक्त प्रोसेसिंग कर सकता हूं।

लेकिन जब मैं यह कर ऊपर सरणी के बजाय के रूप में प्रदान की गई है:

[अपरिभाषित × 2]

हालांकि वस्तु अन्यथा वास्तव में एक साधारण उदाहरण के रूप में ही व्यवहार करती है।

कहीं ज्यादा बेहतर विवरण के लिए इस फिडल देखें: http://jsfiddle.net/5YgAv/

तो आप देख? दो बहुत ही समान उदाहरण, हालांकि गेटटर की उपस्थिति ने इसे कंसोल में तोड़ दिया है।

मैं नवीनतम क्रोमियम स्रोत कोड डीबग कर रहा हूं और ऐसा लगता है कि क्रोम कंसोल पर एक संदेश धक्का देता है जिसमें अनिवार्य रूप से गेटर फ़ंक्शन होता है। हालांकि कंसोल स्रोत कोड को संशोधित करने का कोई तरीका नहीं है ताकि वह फ़ंक्शन का आह्वान कर सके और मूल्य प्राप्त कर सके। यदि यह संभव था तो हम गेटर्स और सेटर्स को सही तरीके से संभालने के लिए डेवलपर टूल को संशोधित कर सकते थे।

मैं क्या जानना चाहता हूं कि अगर किसी को इस रोचक छोटी बग में कोई अंतर्दृष्टि है या इसे क्रोम टीम के साथ एक बग के रूप में फ़ाइल करने से पहले इसे कैसे ठीक किया जा सकता है, तो इसे लंबे समय तक भुला दिया जाना चाहिए और गहराई में दफन किया जाना चाहिए गूगल। मैं वास्तव में इसे अपने आप को एक या दूसरे तरीके से ठीक करना चाहता हूं।

मैं भी एक समाधान है कि सुरुचिपूर्ण है और मुझे कुछ विशेष प्रसंस्करण करने के लिए जब मेरे सरणी जैसी वस्तु पर प्रॉपर्टी के किसी भी संशोधित कर रहे हैं अनुमति देता है के लिए खुला रहा हूँ।

सहायता मुझे ओबी-Stackoverflow-केनोबी, तुम मेरे ही उम्मीद कर रहे हैं!

[रयान]

+3

जावास्क्रिप्ट शान्ति ES मानक का हिस्सा नहीं हैं, क्योंकि, और न तो है वहाँ "सरणी की तरह व्यवहार"। क्या क्रोम को वास्तव में एक स्प्लिस विधि की आवश्यकता है? उदाहरण के लिए ओपेरा सब कुछ "लंबाई" संपत्ति सूची के साथ प्रदर्शित करता है। – Bergi

+0

यह वास्तव में अंतर्दृष्टिपूर्ण धन्यवाद है! मैंने मानक पर संक्षेप में देखा था और दूसरे स्टैक ओवरफ्लो प्रश्न की राय पर जा रहा था। उसके लिए धन्यवाद। हालांकि सवाल अभी भी खड़ा है, क्रोम देव उपकरण सामान्य रूप से क्रोम के प्रदर्शन के अनुसार गलत तरीके से प्रदर्शित होते हैं! –

उत्तर

2

हालांकि यह क्यों क्रोम नहीं एक सरणी की तरह अपने सरणी बाहर लिखेंगे के सवाल का जवाब नहीं है, वहाँ एक रास्ता यह कर में करने के लिए "चाल" क्रोम है। हमारे लिए सौभाग्य से, यह बहुत ही आसान है।

  1. , अपने वस्तु की toString समारोह अधिलेखित करें अपने डेटा चर
  2. लौटने जब आप अपने सरणी प्रवेश करें, तो myArray के रूप में यह लॉग इन करें।तार();

इस jsFiddle देखें: http://jsfiddle.net/YXwxS/

इस बीच में, मैं इस शोध रखने के लिए जा रहा हूँ यह एक दिलचस्प समस्या :)

+0

थोड़ी अधिक खुदाई के बाद, ऐसा लगता है कि क्रोम डेवलपर टूल वास्तव में काम नहीं कर रहे हैं क्योंकि आप किसी संपत्ति तक पहुंचने की अपेक्षा करते हैं। ऐसा लगता है कि वे फ़ंक्शन प्राप्त करने का सम्मान नहीं कर रहे हैं और इसके बजाय कुछ मूल्य के बाद जा रहे हैं जो अभी तक सेट नहीं है क्योंकि फ़ंक्शन फ़ंक्शन नहीं कहा गया है। मुझे इसे सत्यापित करने के लिए स्रोत को देखने की आवश्यकता होगी, लेकिन यह मेरा अनुमान होगा :) उपर्युक्त कम से कम एक कामकाज है जो काम करता है, और सरल है :) –

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