36

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

(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?

4

10 回答 10

61

双等号是比较 Javascript 中字符串的适当方法,它返回 false,然后一个字符串的左侧和或右侧可能有空格。

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

var panel = response.substr(0, response.indexOf("<")).trim();
if(panel == "combo"){
    //do something
}
于 2012-09-26T14:18:09.387 回答
16

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

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,我认为两个字符串都是空终止的,但事实并非如此。

于 2009-11-10T09:30:49.390 回答
16
A1 = "speed"
A2 = "speed" 

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

在控制台中使用此测试:

escape("speed")

结果:“速度”

escape(A1)

结果:"speed%0D" => 这是问题 %0D !!!

escape(A2)

结果:“速度”=> 好的!!!

使用正确的代码:

if(A1.slice(0, -1) == A2) This is OK!
于 2017-04-17T16:05:09.910 回答
6

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

在此处输入图像描述

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

JSON.stringify(user._id) === JSON.stringify(userId) // true 
于 2019-03-12T05:39:02.667 回答
5

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

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

于 2009-11-10T09:38:36.353 回答
3

如果您想要一些不那么复杂的东西并且您正在处理数字值,请使用

parseFloat()

奇迹般有效

于 2016-12-03T03:41:07.227 回答
3

我建议您最好使用规范化“NFKC”或“NFKD”,因为它们似乎将非破坏空间规范化为常规空间。

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

string1.normalize("NFKC") === string2.normalize("NFKC")
于 2019-04-11T15:38:41.070 回答
2

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

我没有太多直接使用 XmlHttpRequest 的经验,但我知道 javascript 有很多地方使用对接口对象的易失性引用,这些引用在执行期间会发生变化,而不是简单的值。

于 2009-05-14T14:11:44.390 回答
0

Java servlet 可以发送字符串,即

out.println("CARD_VALID");

或者

out.print("CARD_VALID");

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

于 2017-06-02T14:59:25.937 回答
0

铸造对我有用

if (timeSlots[j].id + '' == product.timeSlots[k].id + '') {
}
于 2022-01-13T17:54:22.383 回答