本文来自网易云社区

作者:魏文庆

如果你只想知道==与===的区别,请直接看总结,当然我更希望您能耐心看完全文。
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转换成String型的结果等于String("undefined"),详情请参见javascript类型转换。

比较的双方数据类型不同时,进行隐式类型转换时优先转换成Number型。

本节示例如下:

    // 隐式类型转换优先转换成Number型"99" == 99; // "99"转换成Number型为99"" == 0;    // ""转换成Number型为0true == 1;  // true转换成Number型为1false == "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对象(直接使用原始值), 这部分内容就不展开了。

总结

==和===的异同点:

  1. 比较双方都是对象时,只有指向同一个对象才会相等(包含==/===)。

  2. ===要求比较双方类型相同并且值相等。

  3. ==在比较双方类型不同的时候通常会进行隐式类型转换。

易于记忆的==比较的原则:

  1. null==undefined, null/undefined不进行隐式类型转换。

  2. 进行隐式类型或转换时,优先转换成Number型。

网易云大礼包:https://www.163yun.com/gift

本文来自网易云社区,经作者魏文庆授权发布。

相关文章:
【推荐】 3分钟掌握一个有数小技能:回头客分析
【推荐】 两分钟了解Docker的优势

转载于:https://www.cnblogs.com/163yun/p/9565415.html

== vs === in Javascript相关推荐

  1. 【AJAX】JavaScript的面向对象

    Ajax中后端数据返回后需要前端通过JavaScript来实现动态数据更新的问题.所以,在Ajax中加深了一遍JavaScript面向对象的印象. 基础部分: JavaScript中创建对象并简单对象 ...

  2. 【JavaScript总结】JavaScript语法基础:JS高级语法

    作用域链: 1.JS中只有函数能够限定作用域的范围: 2.变量处理在制定的函数范围内,还有一个特殊的作用域,就是没有用var 声明的全局作用域 3.js中的作用域链是为了清晰的表示出所有变量的作用范围 ...

  3. 【JavaScript总结】JavaScript语法基础:DOM

    ->DOM的理解:文档对应dom树 ->有了DOM能做什么:DOM的操作 html文档做为DOM树模型,DOM树的节点就是对象.对象会触发事件来执行一些事件代码. C#中的事件是一个委托变 ...

  4. 【JavaScript总结】JavaScript语法基础:JS编码

    运算符 数学:+. -. *. / 逻辑:>. < .>= .<=. == . !=.&&.|| . === .!==(完全等于) 对象相关 new delet ...

  5. 【JavaScript总结】JavaScript语法基础:数据类型

    ------>数据类型有哪些? ->基本类型:数字类型,布尔类型,字符串类型 ->引用类型:对象类型,函数类型 ->空类型:null 和 undefined ->运算符: ...

  6. 【JavaScript总结】JavaScript发展与学习内容

    发展: 最初浏览器是为大学里浏览文档用,从地址栏输入文档地址,找到文档显示. 后来各种需求(购物网站,个人博客)出现,已有功能不能满足需求. 可人们依旧在努力满足这种需求,但实现后的效果很不尽人意. ...

  7. Python:模拟登录、点击和执行 JavaScript 语句案例

    案例一:网站模拟登录 # douban.pyfrom selenium import webdriver from selenium.webdriver.common.keys import Keys ...

  8. [JavaScript] JavaScript数组挖掘,不只是讲数组哟(2)

    课程来源:后盾人 上一篇的内容:[JavaScript] JavaScript数组挖掘,不只是讲数组哟 数组引用类型分析,多维数组,用Array.of为数组创建细节,类型检测与转换,在一个数组后面加一 ...

  9. [JavaScript] JavaScript 数组挖掘,不只是讲数组哟

    课程来源:后盾人 数组引用类型分析 数组的定义 const array = new Array('hello', 'dust', 1, 2, 3, 4, 5) console.log(array) l ...

  10. linux下用js生成xml,js2xml:将javascript字符串转换为xml

    有时候爬数据遇到像下面这种,数据在script标签中以javascript形式存在. var totalReviewsValue = 32; var averageRating = 4.5; if(t ...

最新文章

  1. Azure云端部署Exchange 2016双数据中心—Part6(DAG切换测试)
  2. 双11怎么那么强!之二:浅析淘宝网络通信库tbnet的实现
  3. oracle中sp,sp是什么?
  4. android按钮点击toast,关于button点击事件中setOnClick等元素的解读以及方法?以及toast的位置以及作用?...
  5. Linux基本的网络配置
  6. 考前一个月,不,只剩29天
  7. 动易软件上传文件服务器错误,动易 应用程序中的服务器错误
  8. 修改棋牌服务器,关于棋牌服务器的一些程序搭建和数据应用步骤
  9. pandaboard 安装_pandaboard---文件系统的建立(4)
  10. matlab 龙格库塔函数,matlab龙格库塔
  11. Excel如何快速提取单元格括号内数据
  12. Response响应详解
  13. css斜切角/内阴影
  14. android模拟器检测方案优化,逍遥模拟器优化方案 - 新手引导 - 逍遥安卓论坛 - Powered by Discuz!...
  15. PotPlayer 播放器美化设置
  16. BZOJ3238 后缀自动机+推公式
  17. 连锁药店现状和信息化建设思路
  18. 吊钩可视化监控系统智慧工地管理平台系统
  19. 40句让你坦露心声的经典
  20. 正向代理与反向代理通俗理解

热门文章

  1. 在浏览器控制台输出内容 console.log(string);
  2. 【机器视觉学习笔记】双线性插值实现图片任意角度旋转(C++)
  3. Git理论、原理、操作
  4. Java 进阶—— super 和 this 的用法
  5. Spring Boot实战:数据库操作
  6. Ubuntu12中samba环境搭建与使用
  7. js计算浮点数出现小数;解决js计算小数问题;js数组相加出现小数;
  8. React开发(280):moment处理日期
  9. [react] react中的setState和replaceState的区别是什么?
  10. React开发(141):react中ref为class添加ref