JavaScriptで文字列間の等価性をチェックする正しい方法は何ですか?
9 に答える
==
and===
演算子を使用することの違いと意味を完全に理解するまでは===
てください。あいまいな (自明ではない) バグや WTF からあなたを救うことができるからです。「通常の」==
演算子は、内部の型強制により非常に予期しない結果になる可能性があるため、===
常に使用することをお勧めします。
これと Javascript の他の「良い部分と悪い部分」についての洞察については、Douglas Crockford 氏と彼の作品を読んでください。彼が多くの有益な情報をまとめた素晴らしい Google Tech Talk があります: http://www.youtube.com/watch?v=hQVTIJBZook
アップデート:
Kyle SimpsonによるYou Don't Know JSシリーズは優れています (オンラインで無料で読むことができます)。このシリーズでは、よく誤解されている言語の領域について説明し、Crockford 氏が避けるように提案している「悪い部分」について説明します。それらを理解することで、それらを適切に使用し、落とし穴を避けることができます。
" Up & Going " ブックにはEquality==
に関するセクションがあり、 Loose ( ) 演算子と strict ( ===
) 演算子をいつ使用するかを具体的にまとめています。
多くの詳細をいくつかの簡単な要点に要約し、さまざまな状況で を使用するかどうかを判断するのに役立つ
==
よう===
に、ここに私の簡単なルールを示します。
- 比較のいずれかの値 (サイド) が
true
またはのfalse
値になる可能性がある場合は、 を避け==
て使用します===
。- 比較のいずれかの値がこれらの特定の値 (
0
、""
、または[]
-- 空の配列) である可能性がある場合は、使用を避け==
て使用して===
ください。- それ以外の場合は、安全に使用できます
==
。安全であるだけでなく、多くの場合、コードが単純化されて読みやすくなります。
Javascript を本当に理解するために時間を費やしたくない開発者には、Crockford の講演をお勧めします。Javascript をたまにしか使用しない開発者には良いアドバイスです。
文字列であることがわかっている場合は、型を確認する必要はありません。
"a" == "b"
ただし、文字列オブジェクトは等しくないことに注意してください。
new String("a") == new String("a")
false を返します。
valueOf() メソッドを呼び出して String オブジェクトのプリミティブに変換し、
new String("a").valueOf() == new String("a").valueOf()
true を返します
回答に 1 つだけ追加します。これらのメソッドがすべて false を返す場合、文字列が等しいように見えても、1 つの文字列の左または右に空白がある可能性があります。したがって、.trim()
比較する前に文字列の末尾に a を追加するだけです。
if(s1.trim() === s2.trim())
{
// your code
}
何が悪いのかを理解しようとして何時間も無駄にしました。これが誰かに役立つことを願っています!