我的 JS 应用程序中随机出现了一个非常奇怪的错误。基本上,脚本无法准确比较两个字符串。更具体地说,有时不会将两个相同的字符串视为相同:('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!我尝试在日志记录中包含引号和 var 类型,我得到了这个结果:
现在很清楚为什么字符串比较失败了:第一个字符串中似乎有一个额外的换行符。它仍然很奇怪,因为它在之前的日志记录中并不是没有出现过一个空白的新行,最重要的是,它随机出现在那里(注意这次'Taiwan'是如何被接受的,没有任何问题)。
我为答案字符串添加了一个简单的换行符删除规则,现在一切似乎都运行良好。非常感谢大家!
最佳答案
使用 === 是严格的相等比较。这意味着正在比较数据类型和内容。它们(数据和类型)必须相同才能等于并返回 true。
当您将严格比较切换为 == 时,即使数据类型不同,测试也应该有效。但是由于多余的空格,它失败了。
关于JavaScript 字符串比较随机失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7708213/