36

次のコードはどのように 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 を返す原因は何ですか?

4

10 に答える 10

61

二重等号は Javascript で文字列を比較する適切な方法です。これは false を返し、1 つの文字列の左または右に空白がある場合があります。

文字列の最後にa.trim()を付けると、比較が機能し始めます。

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

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 であることがわかりました。両方の文字列が null で終了していると思いましたが、そうではありませんでした。

于 2009-11-10T09:30:49.390 に答える
6

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

ここに画像の説明を入力

この問題を解決するには、使用する必要がありました

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

を使用して正確に一致させてみてください===(型と値)。これは、JavaScript で推奨される比較演算子です。

文字列のデータ型を確認して、両方の文字列に隠された Unicode または制御文字を探します。

于 2009-11-10T09:38:36.353 に答える
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 に答える