JavaScriptで文字列間の等価性をチェックする正しい方法は何ですか?
always ==
と ===
演算子の使用の違いと意味を完全に理解するまでは、===
演算子を使用してください。なぜなら、===
演算子は不明瞭な (明らかでない) バグや WTF からあなたを救うことができるからです。 通常の" ==
演算子は、内部で型強制を行っているため、非常に予期しない結果になることがあります。
この点や、Javascriptの他の「良い点と悪い点」についての洞察は、Douglas Crockford氏と彼の研究を読んでください。 彼が多くの良い情報をまとめた素晴らしいGoogle Tech Talkがあります。[
更新情報:
Kyle Simpson氏のYou Don't Know JSシリーズは素晴らしいです(オンラインで無料で読めます)。 このシリーズでは、一般的に誤解されている言語の領域にまで踏み込んで、Crockfordが避けた方がいいと言っている「悪い部分」を説明しています。 それらを理解することで、適切な使い方ができ、落とし穴を避けることができます。
Up & Going]3」にはEqualityという項目があり、緩い(==
)演算子と厳密な(===
)演算子をいつ使うかについて具体的にまとめられています。
たくさんの詳細をいくつかの簡単な要点に集約し、様々な状況で
==
と===
のどちらを使うべきかを知るための助けとなるように、私の簡単なルールを紹介します。
- 比較の中のどちらかの値(別名サイド)が
true
またはfalse
の値になる可能性がある場合は、==
を避けて===
を使用してください。- 比較の中のどちらかの値がこれらの特定の値(
0
,""
,[]
--空の配列)である可能性がある場合、==
を避けて===
を使用してください。- その他のすべてのケースでは、
==
を使っても安全です。安全なだけでなく、多くの場合、コードを単純化して読みやすさを向上させることができます。
Javascriptを理解するために時間を費やしたくない開発者には、Crockford氏の講演をお勧めします—たまにしかJavascriptを使わない開発者にとっても良いアドバイスです。
javascriptで文字列を作るには、実は2つの方法があります。
var str = 'Javascript';
これはプリミティブな文字列値を作成します。
var obj = new String('Javascript');
これは、String
型のラッパーオブジェクトを作成します。
型のラッパーオブジェクトを作成します。
typeof str // 文字列. typeof obj // オブジェクト
.
このように、等しいかどうかをチェックするには、両方のオペランドの型だけでなく、値もチェックするので、===
演算子を使うのがベストです。
もし2つのオブジェクトが同じであるかどうかをチェックしたい場合は,String.prototype.valueOf
を使うのが正しい方法です.
new String('javascript').valueOf() == new String('javascript').valueOf()