我在隨機基礎上發生了一個在我的JS應用程序中出現的奇怪錯誤。基本上,腳本無法準確比較兩個字符串。更具體地說,有時看不到兩個完全相同的字符串:('blah' == 'blah')
返回false
。JavaScript字符串比較隨機失敗
有趣的是,在另一次嘗試中,相同的兩個字符串可能被認爲是相同的(語句返回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
});
},
UPDATE謝謝@JAAulde和@Mike!我一直在努力,包括引號,並在記錄了var類型,我得到了這樣的結果:
現在很清楚爲什麼字符串比較失敗:有似乎是種額外的換行符第一個字符串。這還是很奇怪的,因爲它在上次採伐中並沒有出現空白的新線,最重要的是,它隨機出現(注意這次「臺灣」被接受了,沒有任何問題)。
我已經包含了一個簡單的換行符去除規則的答案字符串,現在一切似乎工作正常。非常感謝大家!
截屏並沒有清楚地表明這些值是'string's,而不是'String'或'Object's'toString'方法。也許你的日誌記錄應該包括被比較的「typeof」值。 –
調整你的日誌記錄,使得輸出的字符串用引號括起來:'console.log('''+ value +'''';''這可能是你有一些空白問題。記錄'typeof'也會很好。 – JAAulde
這很奇怪。你在混合編碼(ISO-8859-1,UTF-8)還是什麼?在比較之前試過兩個運行'.toString()'? –