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

cha*_*imp 29 javascript string compare

以下代码有时如何评估为false?

(transport.responseText == '1' || 
 transport.responseText == 'CARD_VALID')
Run Code Online (Sandbox Code Playgroud)

我的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
}
Run Code Online (Sandbox Code Playgroud)

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

小智 49

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

放在.trim()字符串的末尾,我的比较应该开始工作:

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

  • 应该真的使用等价比较:if(panel ==="combo"). (3认同)
  • 哇,这是个老问题了,但是谢谢您的回答。我可能尝试过,但是谁知道……那是三年多以前的事了。对于其他遇到此问题的人:请尝试此操作。如果有效,请在此处评论,我会将此答案标记为正确! (2认同)
  • 您保存了我的理智-使用.length进行的快速检查证明了我看起来相同的两个字符串毕竟根本不相等! (2认同)

Rob*_*ert 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;
    }
}
Run Code Online (Sandbox Code Playgroud)

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


Lig*_*ion 7

A1 = "speed"
A2 = "speed" 

if(A1 == A2)  => Error !!!
Run Code Online (Sandbox Code Playgroud)

在控制台中使用此测试:

escape("speed")
Run Code Online (Sandbox Code Playgroud)

结果:“速度”

escape(A1)
Run Code Online (Sandbox Code Playgroud)

结果:“ speed%0D” =>这是%0D的问题!!!

escape(A2)
Run Code Online (Sandbox Code Playgroud)

结果:“速度” =>确定!

使用正确的代码:

if(A1.slice(0, -1) == A2) This is OK!
Run Code Online (Sandbox Code Playgroud)

  • 欢迎来到 SO。格式化您的答案并尝试提供一些评论。尽可能提供实际答案而不是伪代码(包括现在)。您的答案应该为其他用户提供的宝贵答案添加一些内容。一个新的方法或点,否则它是多余的。 (2认同)
  • 他们说一张图片等于1000个字!源代码也是如此!人们写下他们的想法,但有时很难理解这个想法以及如何检查它。就我个人而言,对我来说,看到三行代码总是比理解人们用大量文字解释时的想法更容易。当然,一旦好处看不到,我就不会再多写和评论了。问候! (2认同)

Ahm*_*nes 6

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

在此处输入图片说明

为了解决这个问题,我不得不使用

JSON.stringify(user._id) === JSON.stringify(userId) // true 
Run Code Online (Sandbox Code Playgroud)

  • 避免使用图像。文本更适合复制和搜索。 (2认同)

sat*_*sat 5

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

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


yat*_*ney 5

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

所以你可以将代码编写为:-

string1.normalize("NFKC") === string2.normalize("NFKC")
Run Code Online (Sandbox Code Playgroud)