web-dev-qa-db-ja.com

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を返しますか?

28
chaimp

ダブルイコールは、Javascriptで文字列を比較する適切な方法です。falseを返している場合、1つの文字列の左右に空白が存在する可能性があります。

文字列の最後に.trim()を置くと、比較が機能し始めます:

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

私は2つの明らかに同一の文字列が等しくないという同様の問題を抱えていたので、それを解決しようとして髪を引っ張っていたので、これをしました:

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;
    }
}

そして、1つの文字列の最後の文字が10で、もう1つの文字列の最後の文字が13であることがわかりました。

13
Robert
A1 = "speed"
A2 = "speed" 

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

コンソールでこのテストを使用します。

escape("speed")

結果:「速度」

escape(A1)

result: "speed%0D" =>これは問題%0Dです!!!

escape(A2)

結果: "速度" => OK !!!

正しいコードを使用してください:

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

===を使用して、完全に一致するようにしてください(タイプと値)。これは、javascriptで推奨される比較演算子です。

文字列のデータ型を確認して確認し、両方の文字列で非表示のユニコードまたは制御文字を探します。

4
sat

私は同じ問題を抱えていて、2つのオブジェクトを比較していることに気付きました

enter image description here

この問題を解決するために私は使用しなければなりませんでした

JSON.stringify(user._id) === JSON.stringify(userId) // true 
2
Ahmed Younes

変数がどこかで更新された場合に備えて、そのコードブロックに入る前にresponseTextの値を別の変数にキャプチャしてみてください。

XmlHttpRequestを直接使用した経験はあまりありませんが、javascriptには、単純な値ではなく、実行中に変化する可能性のあるインターフェイスオブジェクトへの揮発性参照を使用する場所がいくつかあることがわかります。

2
Joel Coehoorn

少し複雑なものが必要で、数値を扱う場合は、使用します

parseFloat()

魅力のように働く

1
Jamisco

normalization できれば "NFKC"または "NFKD"を使用することをお勧めします。これらは非分割スペースを通常のスペースに正規化するようです。

したがって、次のようにコードを記述できます。

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

Javaサーブレットは文字列、つまり.

out.println( "CARD_VALID");

または

out.print( "CARD_VALID");

これらはJavascriptで同じように見えるかもしれませんが、最初のケースでは最後に空白があります。

0
Kaj Risberg