ホームページ >ウェブフロントエンド >jsチュートリアル >JavaScript アドバンスト シリーズ - 型の等価性と比較

JavaScript アドバンスト シリーズ - 型の等価性と比較

黄舟
黄舟オリジナル
2017-02-08 09:50:291428ブラウズ
  • 等号演算子

  • 厳密等号演算子

  • 比較オブジェクト

  • 結論


JavaScriptには、2つの値が等しいかどうかを判断する2つの方法があります。

等号演算子

等号演算子は 2 つの等号で構成されます: ==

JavaScript は弱い型指定言語です。つまり、等号演算子は 2 つの値を比較するためにキャストを実行します。

""           ==   "0"           // false
0            ==   ""            // true
0            ==   "0"           // true
false        ==   "false"       // false
false        ==   "0"           // true
false        ==   undefined     // false
false        ==   null          // false
null         ==   undefined     // true
" \t\r\n"    ==   0             // true

上の表は強制的な型変換を示しています。これが == の使用が悪いプログラミング習慣であると広く考えられている主な理由であり、その複雑な変換ルールにより追跡が難しい問題を引き起こす可能性があります。

さらに、強制的な型変換もパフォーマンスを消費します。たとえば、文字列を数値と比較するには、事前に強制的に数値に変換する必要があります。


厳密等号演算子

厳密等号演算子は 3 つの等号で構成されます: ===

通常の等号演算子とは異なり、厳密等号演算子はキャスト型の変換を実行しません。

""           ===   "0"           // false
0            ===   ""            // false
0            ===   "0"           // false
false        ===   "false"       // false
false        ===   "0"           // false
false        ===   undefined     // false
false        ===   null          // false
null         ===   undefined     // false
" \t\r\n"    ===   0             // false

上記の結果はより明確であり、コード分析が容易になります。 2 つのオペランドの型が異なる場合、それらは明らかに等しくなく、パフォーマンスの向上に役立ちます。


オブジェクトの比較

== 演算子と === 演算子は両方とも等しい演算子ですが、オペランドの 1 つがオブジェクトの場合、動作が異なります。

{} === {};                   // false
new String('foo') === 'foo'; // false
new Number(10) === 10;       // false
var foo = {};
foo === foo;                 // true

ここでの等価演算子は、値が等しいかどうかではなく、それらが同じ ID に属しているかどうか、つまり、オブジェクトの同じインスタンスのみが等しいかどうかを比較します。 これは、Python のポインタ比較と C のポインタ比較に少し似ています。

注: == と === の違いをより直観的に確認するには、JavaScript 等価表を参照してください


結論

厳密な等価演算子を使用することを強くお勧めします。型を変換する必要がある場合は、言語自体の複雑な強制規則を使用するのではなく、比較の前に明示的に変換する必要があります。

上記は JavaScript の上級シリーズ - 型の等価性と比較です。その他の関連コンテンツについては、PHP 中国語 Web サイト (www.php.cn) に注目してください。


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。