JS中==、===你分清楚了吗


Posted in Javascript onMarch 04, 2020

==、===都是相等运算符,这个大家应该都知道,但二者有什么区别呢?其实==是相等,===是严格相等,那他们有什么本质的区别呢?下面我就给大家细细道来。

  • =:赋值运算符
  • ==:判断是否相等:忽略了类型进行值的比较。
  • ===:判断是否相等:先进行值的比较,如果值相等,再去比较类型。即带有类型的值的比较。

==相等

比较两个值的时候,有两种情况,一种如果两个值的类型相同,就直接比较;另一种如果两个值得类型不同,则会尝试改变为相同的类型在进行比较
第一种很好理解,直接比较完事儿,第二种就更有趣一些,它到底是怎么转换的呢?下面我们一一列举

数字和字符串比较

99 == ''99"

大家猜一猜结果是什么True?False?

结果为True
其实JS在数字和字符串比较时,都是把字符串转换为数字,再对数字进行比较的,举个列子

99 == "chuichui"

JS是怎么转换的呢?

99 == NaN // false

JS尝试转换字符串'chuichui',但是该字符串并不能转换为数字,这时候转换的结果就为NaN

布尔值和其他类型比较

其实JS在布尔值和其他类型比较时,都是把布尔值转换为数字,再进行比较的,举个列子

1 == true
↓↓↓↓↓↓
1 == 1

JS会将true转化为数字1,再做比较
那"1" == true又是怎么比较的呢?

"1" == true
↓↓↓↓↓↓
"1" == 1
↓↓↓↓↓↓
1 == 1 // true

转换顺序

  1. 将true转换为1
  2. 将字符串“1”转换为数字1
  3. 数字1和数字1比较

null和undefined比较

null == undefined

大家猜一猜,结果是True?False?

结果为True
是不是感觉很奇怪,但规则就是这样。我们可以理解为都是“没有值”
只不过一个是没有值得变量,一个是没有值的对象,因此他们相似

小心

有一个需要注意的地方,有些转换你可能猝不及防

false == ""
True?False?

结果为True
转换过程

  1. false转化为0
  2. 空字符串""转换为0,没错就是0 !
  3. 数字0和数字0比较

下面我们在说说严格相等 ===

===严格相等

有了前面的相等的定义,我想大家能猜个八九不离十,严格相等就是类型和值完全相同,这里不存在以上所存在的转换问题

最后

操作数1 == 操作数2, 操作数1 === 操作数2

比较过程:

双等号==:

(1)如果两个值类型相同,再进行三个等号(===)的比较

(2)如果两个值类型不同,也有可能相等,需根据以下规则进行类型转换在比较:

1)如果一个是null,一个是undefined,那么相等

2)如果一个是字符串,一个是数值,把字符串转换成数值之后再进行比较

三等号===:

(1)如果类型不同,就一定不相等

(2)如果两个都是数值,并且是同一个值,那么相等;如果其中至少一个是NaN,那么不相等。(判断一个值是否是NaN,只能使用isNaN( ) 来判断)

(3)如果两个都是字符串,每个位置的字符都一样,那么相等,否则不相等。

(4)如果两个值都是true,或是false,那么相等

(5)如果两个值都引用同一个对象或是函数,那么相等,否则不相等

(6)如果两个值都是null,或是undefined,那么相等

到此这篇关于JS中==、===的文章就介绍到这了,更多相关JS中==、===内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木

Javascript 相关文章推荐
jquery下组织javascript代码(js函数化)
Aug 25 Javascript
关于firefox的ElementTraversal 接口 使用说明
Nov 11 Javascript
动态加载外部javascript文件的函数代码分享
Jul 28 Javascript
基于jquery实现即时检查格式是否正确的表单
May 06 Javascript
Bootstrap轮播插件简单使用方法介绍
Jun 21 Javascript
JS实现n秒后自动跳转的两种方法
Nov 30 Javascript
JavaScript中的事件委托及好处
Jul 12 Javascript
手机端实现Bootstrap简单图片轮播效果
Oct 13 Javascript
如何写好你的JavaScript【推荐】
Mar 02 Javascript
整理关于Bootstrap列表组的慕课笔记
Mar 29 Javascript
Vue中通过Vue.extend动态创建实例的方法
Aug 13 Javascript
面试中canvas绘制图片模糊图片问题处理
Mar 13 Javascript
js数组相减简单示例【删除a数组所有与b数组相同元素】
Mar 04 #Javascript
通过实例了解Javascript柯里化流程
Mar 03 #Javascript
微信小程序getLocation 需要在app.json中声明permission字段
Mar 03 #Javascript
Javascript作用域和作用域链原理解析
Mar 03 #Javascript
JS数组方法reduce的用法实例分析
Mar 03 #Javascript
Javascript模拟实现new原理解析
Mar 03 #Javascript
JS面向对象编程——ES6 中class的继承用法详解
Mar 03 #Javascript
You might like
深入解析fsockopen与pfsockopen的区别
2013/07/05 PHP
PHP捕获Fatal error错误的方法
2014/06/11 PHP
PHP中常见的缓存技术实例分析
2015/09/23 PHP
PHP 实现从数据库导出到.csv文件方法
2017/07/06 PHP
javascript 获取页面的高度及滚动条的位置的代码
2010/05/06 Javascript
javascript获取当前日期时间及其它操作函数
2011/01/11 Javascript
JS取文本框中最小值的简单实例
2013/11/29 Javascript
jquery实现不同大小浏览器使用不同的css样式表的方法
2014/04/02 Javascript
基于iframe实现类似于ajax的页面无刷新
2014/05/31 Javascript
JS数组的常见用法实例
2015/02/10 Javascript
JavaScript位置与大小(1)之正确理解和运用与尺寸大小相关的DOM属性
2015/12/26 Javascript
jQuery简单实现上下,左右滑动的方法
2016/06/01 Javascript
vue-resource拦截器设置头信息的实例
2017/10/27 Javascript
浅谈Angular文字折叠展开组件的原理分析
2017/11/24 Javascript
angularjs通过过滤器返回超链接的方法
2018/10/26 Javascript
vue+koa2实现session、token登陆状态验证的示例
2019/08/30 Javascript
js实现拖拽与碰撞检测
2020/09/18 Javascript
Python实现的寻找前5个默尼森数算法示例
2018/03/25 Python
python中redis查看剩余过期时间及用正则通配符批量删除key的方法
2018/07/30 Python
使用 Python 实现微信群友统计器的思路详解
2018/09/26 Python
python变量命名的7条建议
2019/07/04 Python
django中上传图片分页三级联动效果的实现代码
2019/08/30 Python
浅谈Python中threading join和setDaemon用法及区别说明
2020/05/02 Python
基于Python的Jenkins的二次开发操作
2020/05/12 Python
python实现简单遗传算法
2020/09/18 Python
Canvas制作旋转的太极的示例
2018/03/09 HTML / CSS
垃圾回收的优点和原理
2014/05/16 面试题
一名毕业生的自我鉴定
2013/12/04 职场文书
本科生的职业生涯规划范文
2014/01/09 职场文书
绩效考核实施方案
2014/03/18 职场文书
座谈会主持词
2014/03/20 职场文书
服务承诺书格式
2014/05/21 职场文书
关于成绩下滑的自我检讨书
2014/09/20 职场文书
学生会招新宣传语
2015/07/13 职场文书
2016年毕业实习心得体会范文
2015/10/09 职场文书
导游词之重庆渣滓洞
2020/01/08 职场文书