JavaScriptの文字列が等しいかどうかを確認する正しい方法は何ですか?
{} == "[object Object]"
たとえば、trueと評価されるため。
String().equals()
JSのメソッドではない、やや煩わしい…
JavaScriptの文字列が等しいかどうかを確認する正しい方法は何ですか?
{} == "[object Object]"
たとえば、trueと評価されるため。
String().equals()
JSのメソッドではない、やや煩わしい…
回答:
いつもあなたが完全に違いや使用する意味を理解するまで、==
および===
演算子を使用する===
ことがあいまい(非自明な)バグやWTFsからあなたを救うため、演算子を。「通常の」==
演算子は、内部で型強制が行われるため、非常に予期しない結果になる可能性があるため、===
常に使用することをお勧めします。
これについての洞察、およびJavaScriptの他の「良い点と悪い点」の部分について、Douglas Crockford氏と彼の研究について読んでください。彼がたくさんの良い情報を要約する素晴らしいGoogle Tech Talkがあります:http : //www.youtube.com/watch?v=hQVTIJBZook
更新:
カイル・シンプソンの「You Do n't Know JS」シリーズは優れています(オンラインで無料で読むことができます)。このシリーズでは、よく誤解されている言語の領域を取り上げ、Crockfordが回避するよう提案した「悪い部分」について説明します。それらを理解することで、それらを適切に使用し、落とし穴を避けることができます。
「アップ&ゴーイング」本は、上のセクションが含ま平等を(緩んを使用するときのこの特定の要約で、==
厳格な(VS) ===
)演算子:
多くの詳細をいくつかの簡単な要点に要約し、使用するかどうか、
==
または===
さまざまな状況で使用するかどうかを知るのに役立つように、ここに簡単なルールを示します。
- 比較のどちらかの値(別名)が
true
orfalse
値である可能性がある場合は、==
を使用しないでください===
。- 比較のいずれかで値がこれらの特定の値(とすることができれば
0
、""
または[]
、避ける-空の配列)==
と使用===
。- それ以外の場合はすべて、安全に使用できます
==
。安全であるだけでなく、多くの場合、読みやすさを向上させる方法でコードを簡素化します。
JavaScriptを本当に理解するために時間を費やしたくない開発者には、まだCrockfordの講演をお勧めします。これは、たまにしかJavaScriptで作業しない開発者には良いアドバイスです。
if (typeof foo == "string")
===
演算子を使用し、「本当に、完全に、100%確実に、==
私が思うように動作するかどうか」を心配する必要はありません。
++
/ --
)を使用しないようにという彼のアドバイスです。
++
か、--
単一ラインまたはif/else
文またはcontinue
またはnew
オペレータまたはクロックフォードが「有害」と認めていることを完全に正当なコード慣行他の任意の数を。そしてもちろん決して、これまでにも使用することについて考えて検討していないeval
か、with
その落とし穴はよく理解されている場合でも。そして、あなたはJSの次のバージョンを見ましたか?厳密な構文といくつかのヘルパー関数(何年もの間浮かんでいるもの)は、今のところ結局のところすべてです。構文はまったく進化していません。クロックフォードがこの背後にある場合、それは悪いことです。
それらが文字列であることがわかっている場合は、型を確認する必要はありません。
"a" == "b"
ただし、文字列オブジェクトは等しくないことに注意してください。
new String("a") == new String("a")
falseを返します。
valueOf()メソッドを呼び出して、Stringオブジェクトのプリミティブに変換します。
new String("a").valueOf() == new String("a").valueOf()
trueを返します
new String("a") == "a"
trueです(ただし、ではありません===
)。
new String("a") == new String("a")
すべてのリターンはなりますが、のオブジェクトへの参照を扱っていることから、クラス、タイプのプリミティブではありません。new String("a") === new String("b")
new String("a") === new String("a")
false
String
string
new String(foo)
文字列の作成オブジェクトを、およびString(foo)
変換プリミティブ文字列にFOOを。
回答への1つの追加:これらのすべてのメソッドがfalseを返す場合、文字列が等しいように見えても、1つの文字列の左側または右側に空白がある可能性があります。したがって、.trim()
比較する前に文字列の最後にa を置くだけです。
if(s1.trim() === s2.trim())
{
// your code
}
私は何が悪いのかを理解しようとすることに何時間も費やしてきました。これが誰かに役立つことを願っています!
fetch
)。どうもありがとう。
何この質問に私を導いたことはあるpadding
とwhite-spaces
私のケースをチェック
if (title === "LastName")
doSomething();
そしてタイトルは " LastName"
だから多分あなたは
trim
このような関数を使わなければならない
var title = $(this).text().trim();
.toString().trim()
強制がどのように機能するかを本当に理解していない限り、代わりに==
ID演算子を使用しないでください===
。しかし、それがどのように機能するかを理解するためにこれを読むべきです。
を使用する==
と、言語に何らかの型強制を行わせることができます。たとえば、次のようにします。
"1" == 1 // true
"0" == false // true
[] == false // true
ダグラス・クロックフォードが彼の本で言ったように:
常にアイデンティティ演算子を使用する方が適切です。
{}==" "
私が与えたUnexpected token ==
それを行うための正しい方法をいただきましたか!?
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()
これを行う最も簡単な方法は、次のような三項演算子を使用することです。
"was" == "was" ? true : false
ただし、比較する文字列が配列内にある場合は、es6フィルターを使用します
let stringArray = ["men", "boys", "girls", "sit", "can", "gotten"]
stringArray.filter(I=> I === boys ?
stringArray.pop(indexOf(I)) : null)
上記では、stringArrayと、それに一致するすべての文字列をチェックします。この例では、「boys」を選択しました。
テスト中に代替ソリューションを思いつきました。文字列プロトタイプで関数を使用できます。
String.prototype.betwenStr = function(one){
return JSON.stringify(new String(this)) === JSON.stringify(new String(one));
}
//call it
"hello world".betweenStr("hello world"); //returns boolean
//value
Chromeブラウザで正常に動作します
==
。