मुझे लगता है कि मुझे जावास्क्रिप्ट स्टेटमेंट के लिए आईई (आईई 8) हैंडलिंग में एक बग मिला है। इसे एक छोटे से उदाहरण के लिए उबलने के कई घंटों के बाद, ऐसा लगता है कि आईई विशेष रूप से किसी फॉर-इन लूप में "टूस्ट्रिंग" नामक किसी भी संपत्ति को छोड़ देता है - भले ही यह प्रोटोटाइप में है या ऑब्जेक्ट की "खुद की संपत्ति" है।आईई 8 बग के लिए जावास्क्रिप्ट कथन में?
मैं रखा है मेरी test code here:
function countProps(obj) {
var c = 0;
for (var prop in obj) {
c++;
}
return c;
}
var obj = {
toString: function() {
return "hello";
}
};
function test() {
var o = "";
var d = document.getElementById('output');
o += "<br/>obj.hasOwnProperty('toString') == " + obj.hasOwnProperty('toString');
o += "<br/>countProps(obj) = " + countProps(obj);
o += "<br/>obj.toString() = " + obj.toString();
d.innerHTML = o;
}
यह चाहिए उत्पादन:
obj.hasOwnProperty('toString') == true
countProps(obj) = 1
obj.toString() = hello
लेकिन IE में, मैं हो रही है:
obj.hasOwnProperty('toString') == true
countProps(obj) = 0
obj.toString() = hello
किसी भी इस विशेष आवरण 'टूस्ट्रिंग' नामक संपत्ति मेरे कोड के साथ विनाशकारी है जो एक फंक्शन.प्रोटोटाइप में विधियों की प्रतिलिपि बनाने की कोशिश करती है - मेरा सीयू स्टॉम टूस्ट्रिंग फ़ंक्शन हमेशा छोड़ा जाता है।
क्या कोई काम के आसपास जानता है? क्या यह किसी प्रकार का क्विर्क-मोड केवल व्यवहार है - या सिर्फ एक बग?
धन्यवाद मेरा उत्तर के हवाले के लिए, मैं दूसरे सूत्र में समस्या के लिए कुछ वैकल्पिक हल पोस्ट करेंगे -और शायद अधिक कार्यान्वयन bugs-;) – CMS
धन्यवाद। तो, जावास्क्रिप्ट स्पेक के विपरीत, यह एक ऐसा मामला है जहां उपयोगकर्ता परिभाषित संपत्ति गणना योग्य नहीं है। क्या ऐसी सभी संपत्तियों की एक सूची है, इसलिए मैं अपने कोड में एक विशेष परीक्षण जोड़ सकता हूं जब dontEnumBug सत्य नहीं है? – mckoss
मैंने अपना टेस्ट कोड अपडेट किया: http://startpad.googlecode.com/hg/labs/js/misc/tostring.html चारों ओर एक कार्य विशेष रूप से नामित गुणों की उपस्थिति के लिए परीक्षण करना चाहिए: toString, toLocaleString, valueOf , IE8 के अपने परीक्षणों से, कन्स्ट्रक्टर, और isPrototypeOf है। – mckoss