मैंने देखा है कि कुछ कोड जो ई-कॉमर्स साइट के लिए कुछ जूता आकार का मूल्यांकन करते हैं और उन्हें स्क्रीन पर आउटपुट करते हैं, क्रोम में ऑर्डर को गड़बड़ कर रहे हैं।क्रोम री-ऑर्डरिंग ऑब्जेक्ट कुंजियां यदि संख्यात्मक हैं, तो सामान्य/अपेक्षित
JSON हो सकता दिया:
{
"7": ["9149", "9139", "10455", "17208"],
"7.5": ["9140", "9150", "10456", "17209"],
"8": ["2684", "9141", "10457", "17210"],
"8.5": ["9142", "10444", "10458", "17211"],
"9": ["2685", "9143", "10459", "17212"],
"9.5": ["10443", "9144", "10460", "17213"]
}
... जो हिस्सों में आकार बढ़ा देता है।
एक वस्तु में रूपांतरण और हालांकि चाबियाँ पुनरावृत्ति होने पर, प्राकृतिक व्यवस्था का सम्मान किया जा रहा है और वे के रूप में बाहर आते हैं:
7, 7.5, 8, 8.5 आदि
लेकिन में क्रोम केवल, कुंजी उस दौर संख्या हमेशा पहली वस्तु से बाहर आते हैं, इसलिए की एक के लिए ... पाश में है उत्पादन की तरह 'देखो':
7, 8, 9, 7। 5, 8.5, 9.5 ...
Object.keys(sizes); // ["7", "8", "9", "7.5", "8.5", "9.5"]
यहाँ परीक्षण का मामला है: https://jsfiddle.net/wcapc46L/1/
यह केवल पूर्ण संख्याओं को प्रभावित करता है है लगता है वेबकिट/Blink एक अनुकूलन कि पसंद वस्तु गुण हैं कि है संख्यात्मक, शायद यह शाखा भविष्यवाणी या जो कुछ भी करना है।
आप किसी भी चरित्र के साथ वस्तु कुंजी उपसर्ग है, तो आदेश अप्रभावित रहता है और अपेक्षित तरीके से काम - फीफो
मुझे लगता है कि मैं पढ़ने याद है वहाँ एक वस्तु के गुणों के आदेश पर, लेकिन एक ही में इसकी कोई गारंटी नहीं है कि समय, यह चरम पर परेशान है और अकेले क्रोम उपयोगकर्ताओं के लिए इसे ठीक करने में काफी प्रयास करेगा।
कोई विचार? क्या यह एक बग है जो तय हो जाएगा?
http://code.google.com/p/v8/issues/detail?id=164
Blink ऐसा लगता है कि इसे ठीक करने के लिए नहीं करना चाहते और केवल उस ब्राउज़र होगा रहेगा:
संपादित अतिरिक्त, अब मैं v8 बग ट्रैकर पर एक मुद्दे के रूप में यह पता चला है कर दो।
अद्यतन जो कुछ भी हैश तालिका अनुकूलन वेबकिट/झपकी था, अब छिपकली में अपना रास्ता बना दिया है (एफएफ 27.0.1) - http://jsfiddle.net/9Htmq/ परिणाम
7,8,9,7.5,8.5,9.5
में। चाबियां सही/अपेक्षित आदेश लौटने से पहले_
लागू कर रही हैं।अद्यतन 2017 लोग अभी भी upvoting और यह इतना संपादन कर रहे हैं - यह प्रभावित करने के लिए
Map
/WeakMap
,Set
आदि (के रूप में अद्यतन मुख्य उदाहरण द्वारा प्रदर्शन)
+1। – spender
मुझे लगता है कि आपको यहां योजना बनाने की अपनी विधि को पुनर्व्यवस्थित करने की आवश्यकता है। यदि आपने * पढ़ा है कि आदेश अपरिभाषित है, तो आप अब बहुत सारे कोड को ठीक करने के बारे में शिकायत क्यों कर रहे हैं जब आप अब * आश्चर्यचकित आश्चर्य * खोजते हैं, यह अनिर्धारित है? यह एक बग नहीं है जिसे तय किया जाएगा, अन्य यह कहने के लिए कि बग आपके कोड में है, आपने दस्तावेज़ीकृत व्यवहार पर नहीं, कार्यान्वयन विवरण पर भरोसा किया है। अपना कोड ठीक करें। विकास के समय –
, क्रोम कहीं भी नहीं था और अब यह 7% साइट उपयोगकर्ताओं के लिए है। क्रोम के साथ आने तक, यह सभी ब्राउज़रों के रूप में काम करता था, सफारी शामिल था - इसलिए यह एक वेबकिट मुद्दा नहीं है।और हाँ, मुझे समझ में आता है कि इसे रीफैक्टरिंग की आवश्यकता हो सकती है लेकिन एक आसान समाधान की आशा की जा रही थी (या क्रोम वास्तव में इसे हर किसी की तरह ठीक कर देगा)। अभी के लिए, मुझे परिभाषा के प्राकृतिक क्रम को मजबूर करने के लिए __ या कुछ के साथ सभी ऑब्जेक्ट गुणों को उपसर्ग करना पड़ सकता है। –