JavaScript 字符串比较随机失败

标签 javascript string sencha-touch string-comparison

我的 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 类型,我得到了这个结果:

enter image description here

现在很清楚为什么字符串比较失败了:第一个字符串中似乎有一个额外的换行符。它仍然很奇怪,因为它在之前的日志记录中并不是没有出现过一个空白的新行,最重要的是,它随机出现在那里(注意这次'Taiwan'是如何被接受的,没有任何问题)。

我为答案字符串添加了一个简单的换行符删除规则,现在一切似乎都运行良好。非常感谢大家!

最佳答案

使用 === 是严格的相等比较。这意味着正在比较数据类型和内容。它们(数据和类型)必须相同才能等于并返回 true。

当您将严格比较切换为 == 时,即使数据类型不同,测试也应该有效。但是由于多余的空格,它失败了。

关于JavaScript 字符串比较随机失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7708213/

相关文章:

javascript - 处理 openlayers mobile 标记的点击事件

javascript - 将参数传递给点击或提交功能

javascript - 动态 Moment.js 差异

java - Java 句子阅读练习

c# - 为单个员工分配一个十进制值 c#

android - 无法在 Android 上播放音频 - Sencha Touch SDK 工具 2.0.0

android - Sencha Touch 2.3 与 Cordova 3.5 的启动时间很长

javascript - Flowplayer 具有不自动播放的播放列表

php - 尝试编写 js 会使整个页面变为空白

Javascript srt.IndexOf() 返回 -1 (但包含)