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