以下代码有时会评估为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?
答案 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)
答案 6 :(得分:0)
Java servlet可以发送字符串,即
通过out.println( “CARD_VALID”);
或
的out.print( “CARD_VALID”);
这些在Javascript中可能看起来相同,但在第一种情况下最后会有空格。
答案 7 :(得分:0)
我建议您最好使用normalization,最好是“ NFKC”或“ NFKD”,因为它们似乎会将不间断的空间标准化为规则的空间。
因此您可以将代码编写为:-
string1.normalize("NFKC") === string2.normalize("NFKC")