我在随机基础上发生了一个在我的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()'? –