विफल रहता है मेरे पास मेरे जेएस एप्लिकेशन में यादृच्छिक आधार पर एक सुंदर अजीब बग है। असल में, स्क्रिप्ट दो तारों की सटीक तुलना करने में विफल रहता है। अधिक विशेष रूप से, कभी-कभी दो समान तारों को समान नहीं दिखता है: ('blah' == 'blah')
false
देता है।जावास्क्रिप्ट स्ट्रिंग तुलना यादृच्छिक रूप से
मजाकिया बात यह है कि एक और प्रयास पर, एक ही दो तारों को समान माना जा सकता है (कथन true
देता है)। मैंने कभी पैटर्न को समझने में कामयाब नहीं रहा। मैंने ==
के बजाय ===
का उपयोग करने का भी प्रयास किया है; यह मदद नहीं की।
मैं स्क्रीनकास्ट रिकॉर्ड करने के अलावा इस हास्यास्पद बग को प्रदर्शित करने और साबित करने का एक बेहतर तरीका नहीं सोच सका। तो यहां यह है: http://www.screenr.com/klOs। मैं उस वीडियो में प्रत्येक प्रश्नोत्तरी के लिए सही उत्तर दे रहा हूं, लेकिन अंत के करीब आप 'जापान' और 'ताइवान' के लिए मेरे उत्तरों को 'गलत' के रूप में कैसे माना जाएगा; कंसोल भी दिए गए उत्तर स्ट्रिंग, सही उत्तर स्ट्रिंग, और उनकी तुलना का परिणाम दिखाएगा (false
? !!)।
तो संभवतः इस अजीब व्यवहार का कारण क्या हो सकता है और मैं इसे ठीक करने के लिए कैसे हो सकता हूं?
आप स्क्रीनकास्ट में तुलनात्मक कथन के साथ कोड देख सकते हैं। 'Params.givenAnswer' बटन पाठ लेबल से सीधे आता है:
//*** Options for answering the card quiz
quizOptions = new Ext.Panel({
id: 'quizOptions',
[…………]
listeners: {
el: {
scope: this,
tap: this.checkAnswer
}
}
});
checkAnswer: function(container, element) {
// Get the text value of the button clicked
var answer = Ext.fly(element).dom.innerText;
Ext.dispatch({
controller: 'Practice',
action: 'checkAnswer',
givenAnswer: answer
});
},
अद्यतन आप @JAAulde और @Mike धन्यवाद! क्यों स्ट्रिंग तुलना में विफल रहता है
अब यह स्पष्ट है: वहाँ में एक तरह की एक अतिरिक्त लाइन ब्रेक होने लगते हैं मैं उद्धरण और प्रवेश में वर प्रकार शामिल करने के लिए कोशिश की है और मैं इस परिणाम मिला पहली स्ट्रिंग यह अभी भी बहुत अजीब है, क्योंकि यह पिछले लॉगिंग में एक खाली नई लाइन के रूप में नहीं दिखाई देता था, और सबसे महत्वपूर्ण बात यह है कि यह यादृच्छिक रूप से दिखाई देता है (ध्यान दें कि इस समय बिना किसी समस्या के 'ताइवान' को कैसे स्वीकार किया गया था)।
मैंने उत्तर तारों के लिए एक साधारण लाइन-ब्रेक हटाने का नियम शामिल किया है, और अब सब ठीक काम करने लगते हैं। बहुत बहुत धन्यवाद!
स्क्रीनकास्ट यह स्पष्ट नहीं करता है कि मान 'स्ट्रिंग' और 'स्ट्रिंग' या 'ऑब्जेक्ट' 'toString' विधि के साथ नहीं हैं। हो सकता है कि आपके लॉगिंग में मूल्यों की तुलना में 'टाइपोफ' शामिल होना चाहिए। –
अपने लॉगिंग को समायोजित करें जैसे आउटपुट किए जा रहे स्ट्रिंग उद्धरणों में लिपटे हैं: 'console.log ('' '+ value +' '' ');' यह हो सकता है कि आपके पास कुछ सफेद जगहें हों। लॉगिंग 'टाइपोफ़' भी अच्छा होगा। – JAAulde
यह बहुत अजीब है। क्या आप एन्कोडिंग (आईएसओ -885 9 -1, यूटीएफ -8) या कुछ मिश्रण कर रहे हैं? तुलना से पहले दोनों पर .toString() 'चलने का प्रयास किया? –