web-dev-qa-db-ja.com

JavaScriptで文字列が等しいかどうかを確認する正しい方法は何ですか?

JavaScriptで文字列が等しいかどうかを確認する正しい方法は何ですか?

717
JSS

常に ==演算子と===演算子を使用することの違いとその意味を完全に理解するまでは、===演算子を使用してください。曖昧な(明白でない)バグや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で働いている開発者にとっては良いアドバイスです。

553
STW

あなたがそれらが文字列であることを知っていれば、それから型をチェックする必要はありません。

"a" == "b"

ただし、文字列オブジェクトは等しくなりません。

new String("a") == new String("a")

falseを返します。

ValueOf()メソッドを呼び出して、それをStringオブジェクトのプリミティブに変換します。

new String("a").valueOf() == new String("a").valueOf()

trueを返します

173
Anurag

答えが1つだけ追加されます。文字列が等しいように見えても、これらすべてのメソッドがfalseを返す場合、1つの文字列の左右に空白がある可能性があります。ですから、比較する前に、文字列の最後に.trim()を付けてください。

if(s1.trim() === s2.trim())
{
    // your code
}

私は何が悪いのかを解明しようとしている時間を失いました。これが誰かに役立つことを願っています!

42
akelec

この質問に私を導いたのはpaddingwhite-spacesです

私のケースをチェック

 if (title === "LastName")
      doSomething();

そしてタイトルは" LastName"でした

enter image description here

だから多分あなたはこのようなtrim関数を使用する必要があります

var title = $(this).text().trim();
13

強制がどのように機能するのか本当にわからない場合は、==を避けて、代わりにアイデンティティー演算子===を使用してください。 しかしあなたは これがどのように機能するかを理解するためにこれを読むべきです

あなたが==を使うならば、あなたは言語にあなたに代わってある型強制をさせます、それで、例えば:

"1" == 1 // true
"0" == false // true
[] == false // true

ダグラス・クロックフォードが彼の本で言ったように:

常にアイデンティティ演算子を使用したほうがよいでしょう。

11
ludico8

JavaScriptで文字列を作成する方法は2つあります。

  1. var str = 'Javascript';これはプリミティブ文字列値を作成します。

  2. var obj = new String('Javascript');これはString型のラッパーオブジェクトを作成します。

    typeof str // string
    typeof obj // object

そのため、等価性をチェックする最善の方法は===演算子を使用することです。これは、両方のオペランドの値と型をチェックするためです。

2つのオブジェクト間の同等性をチェックしたい場合はString.prototype.valueOfを使用するのが正しい方法です。

new String('javascript').valueOf() == new String('javascript').valueOf()
9
Abhishek

文字列Objectsはこのハックを使ってチェックすることができますJSON.stringyfy()

var me = new String("me");
var you = new String("me");
var isEquel = JSON.stringify(me) === JSON.stringify(you);
console.log(isEquel);
2
Usman