javascript==と=状況まとめ

5663 ワード

最近また空き値マッチングの問題が発生しました.javascriptコードを作成する時、特にバックエンドの学生と協力する必要がある時、空き値の処理がよくないと問題が発生しやすいです.この機会に徹底的に明らかにしましょう.
1.準備作業:スクリプトを用いて様々な境界値の=====との比較結果を生成し、この結果は基本的にjsで出会うことができるすべての一般的または一般的なデータタイプと構造をカバーする.
2.比較結果:
==
0
1
-0
NaN
「」
foo
{}
{f:“b”}
[]
[foo]
true
false
null
undefined
Infinity
-Infinity
0
true
1
false
true
-0
true
false
true
NaN
false
false
false
false
「」
true
false
true
false
true
foo
false
false
false
false
false
true
{}
false
false
false
false
false
false
true
{f:“b”}
false
false
false
false
false
false
false
true
[]
true
false
true
false
true
false
false
false
true
[foo]
false
false
false
false
false
true
false
false
false
true
true
false
true
false
false
false
false
false
false
false
false
true
false
true
false
true
false
true
false
false
false
true
false
false
true
null
false
false
false
false
false
false
false
false
false
false
false
false
true
undefined
false
false
false
false
false
false
false
false
false
false
false
false
true
true
Infinity
false
false
false
false
false
false
false
false
false
false
false
false
false
false
true
-Infinity
false
false
false
false
false
false
false
false
false
false
false
false
false
false
false
true
==
0
1
-0
NaN
「」
foo
{}
{f:“b”}
[]
[foo]
true
false
null
undefined
Infinity
-Infinity
0
true
1
false
true
-0
true
false
true
NaN
false
false
false
false
「」
false
false
false
false
true
foo
false
false
false
false
false
true
{}
false
false
false
false
false
false
true
{f:“b”}
false
false
false
false
false
false
false
true
[]
false
false
false
false
false
false
false
false
true
[foo]
false
false
false
false
false
false
false
false
false
true
true
false
false
false
false
false
false
false
false
false
false
true
false
false
false
false
false
false
false
false
false
false
false
false
true
null
false
false
false
false
false
false
false
false
false
false
false
false
true
undefined
false
false
false
false
false
false
false
false
false
false
false
false
false
true
Infinity
false
false
false
false
false
false
false
false
false
false
false
false
false
false
true
-Infinity
false
false
false
false
false
false
false
false
false
false
false
false
false
false
false
true
3.違うところ
Chromeコンソール実行結果のスクリーンショット===の比較結果のうち、==とは異なる部分を赤色のブロックで示します.
4.結論
  • は両表の対角線上で自分と自分を比較しています.NaNという珍しい作品以外のすべての値は自分と同じです.IEEE 754はこのように規定されています.
  • 0+0-0は等価です.
  • Object.isは、自分と同じInfinityだけであり、他のどのタイプのいかなる値も等しくない.
  • の異なる部分(赤色の枠の内容)は全部-Infinityの結果、===であり、===の結果はfalseであり、これは==の動作に暗黙的な変換が含まれているためであり、trueの動作には含まれない.暗黙的な変換とは、
  • のことである.
    等しいオペレータは、2つの値が等しいかどうかを比較する前に、2つの比較された値を同じ種類に変換します.変換後(式の片側または両方が変換される可能性がある)、最終的な比較方式は全等オペレータ==の比較方式に相当します.等しいオペレータは交換法則を満たす.変換規則:==および===は互いに等しいが、他の4つのタイプ(undefinednullNumberString)と異なる.Booleanが他のタイプと比較する場合、他のタイプObjectは、Number;ToNumberは他のタイプと比較する場合、自身ToPrimitive;ObjectToPrimitiveとの比較において、双方String.
  • Boolean空配列は、非表示的にToNumberまたは[]に変換され、空のオブジェクトはない.
  • falseタイプが互いに比較する場合、両方の方法はメモリ参照が同じ参照オブジェクトかどうかを比較することであり、その属性値または0を比較するのではなく、例では同じオブジェクトの参照に等しい.
  • Objectには「同じ値」、「ゼロ値が等しい」、ToPrimitiveの比較方法があります.具体的には文末リンクを参照してください.
  • 5.アドバイス
    1 RESTful APIとのインタラクティブアプリケーションを作成する時は、APIを作成する学生とデータ交換プロトコルを約束しなければならない.例えば、属性が空の時はどうやって表現されますか?
    //        ,  null || ''  
    {
        name: 'Jack',
        hobbies: null,
        alias: ''
    }
    
    //       
    {
        name: 'Jack'
    }
    
    二つの方法にはそれぞれ優劣がありますが、後の処理だけではちょっと違っています.この点を考慮しておかないと、いつでも未知の状況が発生する可能性があります.ページにはundefinedやnullなどの文字が表示されます.
    2配列の処理は特に重要であり、前のストリップと同じで、空の時の配列は結局返さないか、それともjavascriptに戻りますか?それとも空の配列Object.isに戻りますか?すべての人はすべて自分の見方があって、しかし前端の学友は自分で各種の情況のをうまく処理しなければなりません.
    参考:
    https://developer.mozilla.org/en-US/docs/Web/JavaScript/Equality_comprisosand_sameneshttps://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Comparison_Operators