У меня в моем JS-приложении случайным образом возникает довольно странная ошибка. По сути, скрипт не может точно сравнить две строки. В частности, иногда две идентичные строки не считаются идентичными: ('blah' == 'blah')
возвращает false
.
Забавно то, что при следующей попытке одни и те же две строки могут быть признаны идентичными (оператор возвращает истину
). Мне так и не удалось выяснить закономерность. Я также пробовал использовать ===
вместо ==
; это не помогло.
Я не мог придумать лучшего способа продемонстрировать и доказать эту нелепую ошибку, кроме записи экрана. Итак, вот оно: 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! Я попытался включить кавычки и тип var в журнал и получил следующий результат:
Теперь понятно, почему сравнение строк не удается: похоже, что в первой строке есть лишний своего рода разрыв строки. Это все еще очень странно, поскольку в предыдущем журнале оно не отображалось как новая пустая строка, и, что наиболее важно, оно появляется там случайным образом (обратите внимание, что на этот раз «Тайвань» был принят без каких-либо проблем).
Я включил простое правило удаления разрывов строки для строк ответа, и теперь, похоже, все работает нормально.Всем большое спасибо!