本文来自网易云社区javascript
做者:魏文庆
html
若是你只想知道==与===的区别,请直接看总结,固然我更但愿您能耐心看彻底文。
Javascript中用于相等比较的操做符有两个==和===。==咱们一般称为“等于”,而===咱们一般称为“严格等于”。本文将对==和===作详细说明。===相对简单,让咱们从===开始。java
===首先要求比较双方类型相同, 还要求比较双方值相等。 若是比较的双方是都是对象类型,只有指向同一个对象,才能严格相等。关于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。.net
null和undefined在比较的时候不会转换成其余类型。null只和undefined相等。htm
本节示例以下:对象
// 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 缘由相似。
blog
关于隐式类型转换到指定类型的结果,其实等价于调用指定类型的构造函数, 好比null隐式类型转换成Number型的结果等于Number(null), undefined转换成String型的结果等于String("undefined"),详情请参见javascript类型转换。
ip
比较的双方数据类型不一样时,进行隐式类型转换时优先转换成Number型。ci
本节示例以下:
// 隐式类型转换优先转换成Number型 "99" == 99; // "99"转换成Number型为99 "" == 0; // ""转换成Number型为0 true == 1; // true转换成Number型为1 false == "0"; ' \n\n\n' == false;
上例中false=="0"比较难以理解,不管是"0"转换成Boolean型(结果为true),仍是把false转换成String型(结果为"false"),值都是不相等的,为何false=="0"呢?咱们只要记住优先转换成Number型原则, false转换成Number型,等于 Number(false),等于0, "0"转换成Number型,等于Number("0"), 等于0, 值相等。' \n\n\n' == false相似,Number(' \n\n\n')等于0, Number(false)等于0, 值相等。
比较的双方数据类型不一样且有一方是Object类型, 先把Object类型转换成原始类型。咱们知道基本只有String/Number/Boolean对象能转换成有意思的原始类型。咱们在程序中不推荐使用String/Number/Boolean对象(直接使用原始值), 这部份内容就不展开了。
==和===的异同点:
比较双方都是对象时,只有指向同一个对象才会相等(包含==/===)。
===要求比较双方类型相同而且值相等。
==在比较双方类型不一样的时候一般会进行隐式类型转换。
易于记忆的==比较的原则:
null==undefined, null/undefined不进行隐式类型转换。
进行隐式类型或转换时,优先转换成Number型。
网易云大礼包:https://www.163yun.com/gift
本文来自网易云社区,经做者魏文庆受权发布。
相关文章:
【推荐】 3分钟掌握一个有数小技能:回头客分析
【推荐】 两分钟了解Docker的优点