2012-02-12 13 views
5

私は本当にどのようにそれが可能かわかりません、そして、私は単純化された環境で、エラーを再現できませんでした、JSFiddleしかし、ここに私のアプリケーションで見える方法です。不思議なjavascriptの振る舞い:等しくないequals

TrueまたはFalseの場合、True、Falseまたは他の文字列をブール値に変換しようとしています。ほとんどの場合、それだけで正常に動作します(彼らは、変換を行うためのスリッカー方法かもしれないが)、しかし、時にはそれが失敗し、時計の値として示し

enter image description here

下図に示すようになります従い

enter image description here

は突然「真」の値を持つ文字列変数には、リテラル文字列「true」に等しいではありません。道に迷いました。どのように可能ですか?私はここで何が欠けていますか?二重引用符ではなく、単一の使用だけで正気を事前

答えて

4

あなたの文字列には、デバッグツールが表示されない文字が含まれていることがあります。ここではGoogle Chromeのコンソールの例を示します。

> var a = "foo"; 
> var b = "foo\r"; 
> a 
"foo" 
> b 
"foo" 
> a === b 
false 

あなたのケースで起こっていますが、何が起こっているかを見つけるために「神秘的な」文字列の.length.charAt(i)プロパティで仕事ができることを言うことは本当に難しいです。

+2

はい、ちょうど自分自身になって、答えを投稿しようとしていました(これは8時間以内にできませんそれが表示されます) さて、それを得ました!あなたの質問をstackoverflowに投稿することは、単独で役立ちます。 'value.length'をチェックして、' 5'と少し驚きました。 サーバからデータをデシリアライズした後に '\ 0'が残っていました。 – michal

+0

単純な 'console.log(value.split(" "));'は何が起こっているのかを助けるかもしれません。 –

+0

ヌル終了文字列。 yay –

0

おかげで、=== "True"のためのテスト、。それは問題ではありませんが、それを除外するだけです:)

+0

投稿する前にそれをしましたが、本当にばかげていると感じました。私は怒っていると思っていました。当然のことながら、結果は予期したとおり、予期せぬ間違ったものでした。しかし少なくとも一貫して。 – michal

+0

@Joe論理は正しいですか、彼はブールtrueまたはfalseまたは値を文字列として持ちます – zatatatata

+0

再読み込み、そうです:)そのコメントを削除しました。 – Joe

関連する問題