Javascript字符串比较==有时会失败

时间:2009-05-14 14:08:33

标签: javascript string compare

以下代码有时会评估为false?

(transport.responseText == '1' || 
 transport.responseText == 'CARD_VALID')

我的JavaScript代码:

if (transport.responseText == '1' || 
    transport.responseText == 'CARD_VALID') {
    // do something.
}
else if (transport.responseText == 'CARD_INVALID' || 
             transport.responseText == 'INVALID_CHECKSUM') {
    // do something else....
}
else {
    new Ajax.Request('/report_error.php?responseText='+transport.responseText);
    // report error to user
}

当字符串相同时,什么可能导致JavaScript字符串比较==返回false?

8 个答案:

答案 0 :(得分:46)

Double equals是比较Javascript中的字符串的合适方法,它返回false,然后在一个字符串的左侧或右侧可能有空格。

在字符串的末尾添加.trim(),我的比较应该开始起作用了:

var panel = response.substr(0, response.indexOf("<")).trim();
if(panel == "combo"){
    //do something
}

答案 1 :(得分:13)

我有一个类似的问题,其中两个明显相同的字符串不相等,而我正试图解决它,所以我做了这个:

for (var c=0; c<string_1.length; c++) {
    if (string_1.charCodeAt(c) != string_2.charCodeAt(c)) {
        alert('c:'+c+' '+string_1.charCodeAt(c)+'!='+string_2.charCodeAt(c));
        valid = false;
    }
}

我发现一个字符串上的最后一个字符是10,而另一个字符串的最后一个字符是13,我认为这两个字符串都是空终止,但它们不是。

答案 2 :(得分:5)

A1 = "speed"
A2 = "speed" 

if(A1 == A2)  => Error !!!

在控制台中使用此测试:

escape("speed")
  

结果:“速度”

escape(A1)
  

结果:“speed%0D”=&gt;这是问题%0D !!!

escape(A2)
  

结果:“速度”=&gt;好的!!!

使用正确的代码:

if(A1.slice(0, -1) == A2) This is OK!

答案 3 :(得分:4)

尝试使用===完全匹配(类型和值)。这是javascript中推荐的比较运算符。

检查字符串的数据类型以确保,并在两个字符串中查找隐藏的unicode或控制字符。

答案 4 :(得分:2)

尝试在输入该代码块之前将responseText的值捕获到另一个变量中,以防变量在那里的某处更新。

我没有那么多直接使用XmlHttpRequest的经验,但我知道javascript有很多地方,它使用对可在执行期间更改的接口对象的易失性引用,而不是简单的值。

答案 5 :(得分:2)

我遇到了同样的问题,并且注意到我在比较两个对象

enter image description here

要解决此问题,我不得不使用

JSON.stringify(user._id) === JSON.stringify(userId) // true 

答案 6 :(得分:0)

Java servlet可以发送字符串,即

通过out.println( “CARD_VALID”);

的out.print( “CARD_VALID”);

这些在Javascript中可能看起来相同,但在第一种情况下最后会有空格。

答案 7 :(得分:0)

我建议您最好使用normalization,最好是“ NFKC”或“ NFKD”,因为它们似乎会将不间断的空间标准化为规则的空间。

因此您可以将代码编写为:-

string1.normalize("NFKC") === string2.normalize("NFKC")