==vs==in Javascript

2994 ワード

本文は網易雲コミュニティから来ます.
作者:魏文慶
もしあなたが知りたいのなら、=と=の違いだけを直接に見てください.Javascriptで等しい比較をする操作子は二つの==と==があります.==私たちは普通「イコール」と呼びますが、==私たちは通常「厳格イコール」と呼びます.本論文では、==と==について詳しく説明します.==比較的簡単です.==から始めましょう.
==
==まず、双方のタイプが同じであることを比較し、双方の値が同じであることを求めます.比較する双方が対象のタイプなら、同じ対象を指すだけで、厳密に同等になります.javascriptのデータタイプについては、Javascirpt基本データタイプを参照してください.このセクションの例は以下の通りです.
    //     ,   ,     
    1 === 1;    "jerry" === "jerry";    true === true;    null === null;    undefined === undefined;    //           ,                
    {name:"jerry"} !== {name: "jerry"}  //      {name:"jerry"}  
    var a = {name:"jerry"};    var b = a;
    a === b;    //        
    //     ,     
    null !== undefined;    false !== 0;    1 !== "1";
==
==比較する場合、比較するデータの種類が違っていれば、通常は同じ種類に変換して比較します.もし比較する双方のタイプが同じなら、この時は==と同じです.もし比較する双方が対象のタイプなら、同じ対象を指すしかないです.他のタイプの場合、比較値が等しいかどうか.比較する両方のタイプが同じである場合、参照==を参照して、両方のタイプが同じ例を比較しても、本節の例としても良いです.これから双方のタイプの違いを比較することを重点的に検討します.上記で述べたように、双方のデータタイプを比較すると、通常は同じタイプに変換されますが、どれが異常ですか?nullとundefinedです
nullとundefinedは比較時に他のタイプに変換されません.nullはundefinedとだけ等しいです.
このセクションの例は以下の通りです
    // null undefined  
    null == undefined;    // null/undefined            
    0 != null;    "undefined" != undefined;    null != false;
上記の例の0に対して!nullは具体的な分析を行い、比較前に暗黙的なタイプの変換を行うとnullはNumber型に変換された結果は0であり、値は等しいが、null/undefinedは比較前に暗黙的なタイプに変換されないため、0!=null「undefined」!=undefined、null!=falseの原因は似ています.
暗黙のタイプが指定のタイプに変換された結果は、null暗黙のタイプがNumber型に変換された結果がNumber(null)に等しい、undefinedがStering型に変換された結果がString(「undefined」)に等しい、ということになります.詳細はjavascriptタイプの変換を参照してください.
比較した両方のデータタイプが異なる場合、暗黙的なタイプの変換を行う場合は、Number型に優先的に変換します.
このセクションの例は以下の通りです.
    //            Number 
    "99" == 99; // "99"   Number  99
    "" == 0;    // ""   Number  0
    true == 1;  // true   Number  1
    false == "0";    ' 


' == false;
上記の例ではfalse=="0"の方が分かりにくいですが、"0"をBoolean型に変換するか(結果はtrue)、それともfalseをString型に変換するか(結果は"false"となります)値は等しくないです.なぜfalse=="0"なのですか?私たちはNumber型の原則に優先的に変換することを覚えさえすれば、falseはNumber型に転換して、Number型に等しくて、0に等しくて、“0”はNumber型に転換して、Number(“0”)に等しくて、値は等しいです.falseは同様で、Number(')は0に等しく、Number(false)は0に等しくなります.
比較したデータの種類が違っています.一方はObjectタイプです.まずObjectタイプを元のタイプに変換します.基本的にはString/Number/Booleanオブジェクトだけが興味深いオリジナルタイプに変換できることを知っています.プログラムではString/Number/Booleanオブジェクトを使用することを推奨しません.この部分は展開しません.
締め括りをつける
==と==の異同点:
  • 双方が対象であると比較した場合、同じオブジェクトを指してこそ等しい(==========を含む).
  • ==両方のタイプが同じで、値が等しいと比較することが要求されます.
  • ==両者のタイプが異なる場合は、暗黙的なタイプの変換が行われることが多い.
  • 記憶しやすい=比較の原則:
  • null==undefined、null/undefinedは暗黙的なタイプの変換を行いません.
  • は、暗黙のタイプまたは変換を行う場合、Number型に優先的に変換される.
  • 網易雲大礼包:https://www.163yun.com/gift
    この文章は網易雲コミュニティから来て、作者の魏文慶の授権を経て発表します.
    関連記事:【おすすめ】 ECMAScript 2015のコード仕様(中)【推奨】 Prometheus+Grafanaを使ってKubergnetesに対して性能監視の実践を行います.