JavaScriptで文字列が等しいかどうかを確認する正しい方法は何ですか?
常に ==
演算子と===
演算子を使用することの違いとその意味を完全に理解するまでは、===
演算子を使用してください。曖昧な(明白でない)バグやWTFを防ぐことができます。 "通常の" ==
演算子は内部的に型強制により非常に予期しない結果になる可能性があるため、===
の使用は常に推奨される方法です。
これについての洞察、およびJavascriptのその他の「良いものと悪いもの」の部分について、Douglas Crockford氏と彼の作品を読んでください。彼がたくさんの良い情報をまとめているすばらしいグーグル技術トークがあります: http://www.youtube.com/watch?v=hQVTIJBZook
更新:
あなたは知らないJS Kyle Simpsonによるシリーズは優れています(そしてオンラインで読むのは無料です)。連載では、言語のよく誤解されている部分について説明し、Crockfordが避けることを提案している「悪い部分」について説明します。それらを理解することによって、あなたはそれらを適切に利用し、落とし穴を避けることができます。
" Up&Going "の本には Equality に関する節があり、このときに緩い(==
)と厳密(===
)の演算子を使うべきであるという具体的な要約があります。
さまざまな状況で
==
または===
を使用するかどうかを知るために、たくさんの詳細をいくつかの簡単な説明にまとめています。これが私の単純な規則です。
- 比較のどちらかの値(別名)が
true
またはfalse
の値になる可能性がある場合は、==
を避けて===
を使用してください。- 比較のいずれかの値がこれらの特定の値(
0
、""
、または[]
- 空の配列)である可能性がある場合は、==
を避けて===
を使用してください。- 他のallの場合、
==
を使用しても安全です。安全であるだけでなく、多くの場合、読みやすさを向上させるようにコードを単純化します。
私はまだ、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()
を付けてください。
if(s1.trim() === s2.trim())
{
// your code
}
私は何が悪いのかを解明しようとしている時間を失いました。これが誰かに役立つことを願っています!
強制がどのように機能するのか本当にわからない場合は、==
を避けて、代わりにアイデンティティー演算子===
を使用してください。 しかしあなたは これがどのように機能するかを理解するためにこれを読むべきです 。
あなたが==
を使うならば、あなたは言語にあなたに代わってある型強制をさせます、それで、例えば:
"1" == 1 // true
"0" == false // true
[] == false // true
ダグラス・クロックフォードが彼の本で言ったように:
常にアイデンティティ演算子を使用したほうがよいでしょう。
JavaScriptで文字列を作成する方法は2つあります。
var str = 'Javascript';
これはプリミティブ文字列値を作成します。
var obj = new String('Javascript');
これはString
型のラッパーオブジェクトを作成します。
typeof str // string
typeof obj // object
そのため、等価性をチェックする最善の方法は===
演算子を使用することです。これは、両方のオペランドの値と型をチェックするためです。
2つのオブジェクト間の同等性をチェックしたい場合はString.prototype.valueOf
を使用するのが正しい方法です。
new String('javascript').valueOf() == new String('javascript').valueOf()
文字列Objects
はこのハックを使ってチェックすることができますJSON.stringyfy()
var me = new String("me");
var you = new String("me");
var isEquel = JSON.stringify(me) === JSON.stringify(you);
console.log(isEquel);