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 相关文章推荐
Javascript与vbscript数据共享
Jan 09 Javascript
jquery1.4 教程二 ajax方法的改进
Feb 25 Javascript
JS动态添加与删除select中的Option对象(示例代码)
Dec 20 Javascript
JavaScript操作cookie类实例
Mar 31 Javascript
jQuery实现文字自动横移
Jan 08 Javascript
jQuery操作DOM_动力节点Java学院整理
Jul 04 jQuery
vue.js中v-on:textInput无法执行事件问题的解决过程
Jul 12 Javascript
node中Express 动态设置端口的方法
Aug 04 Javascript
Angular Material Icon使用详解
Nov 07 Javascript
一些手写JavaScript常用的函数汇总
Apr 16 Javascript
Vue基于vuex、axios拦截器实现loading效果及axios的安装配置
Apr 26 Javascript
微信小程序实现点击按钮后修改颜色
Dec 05 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
PHP文件读写操作之文件读取方法详解
2011/01/13 PHP
php错误提示failed to open stream: HTTP request failed!的完美解决方法
2011/06/06 PHP
php实现的简单数据库操作Model类
2016/11/16 PHP
jquery按回车提交数据的代码示例
2013/11/05 Javascript
jquery如何根据值设置默认的选中项
2014/03/17 Javascript
判断iframe里的页面是否加载完成
2014/06/06 Javascript
JS+CSS实现仿新浪微博搜索框的方法
2015/02/24 Javascript
jQuery实现的仿百度分页足迹效果代码
2015/10/30 Javascript
JavaScript学习笔记之数组的增、删、改、查
2016/03/23 Javascript
javascript 数据存储的常用函数总结
2017/06/01 Javascript
在 Node.js 中使用 async 函数的方法
2017/11/17 Javascript
详解redux异步操作实践
2018/08/15 Javascript
ajax跨域访问遇到的问题及解决方案
2019/05/23 Javascript
JS把字符串格式的时间转换成几秒前、几分钟前、几小时前、几天前等格式
2019/07/10 Javascript
微信小程序的开发范式BeautyWe.js入门详解
2019/07/10 Javascript
three.js利用射线Raycaster进行碰撞检测
2020/03/12 Javascript
用Python编写一个国际象棋AI程序
2014/11/28 Python
安装dbus-python的简要教程
2015/05/05 Python
用Python将IP地址在整型和字符串之间轻松转换
2017/03/22 Python
python 3.6 tkinter+urllib+json实现火车车次信息查询功能
2017/12/20 Python
python 读取视频,处理后,实时计算帧数fps的方法
2018/07/10 Python
django.db.utils.ProgrammingError: (1146, u“Table‘’ doesn’t exist”)问题的解决
2018/07/13 Python
详解python中自定义超时异常的几种方法
2019/07/29 Python
keras tensorflow 实现在python下多进程运行
2020/02/06 Python
Python + selenium + crontab实现每日定时自动打卡功能
2020/03/31 Python
基于Python-turtle库绘制路飞的草帽骷髅旗、美国队长的盾牌、高达的源码
2021/02/18 Python
html svg生成环形进度条的实现方法
2019/09/23 HTML / CSS
Linux如何命名文件--使用文件名时应注意
2014/05/29 面试题
生物科学系大学生的自我评价
2013/12/20 职场文书
2015年元旦活动总结
2014/05/09 职场文书
人力资源求职信
2014/05/25 职场文书
副主任竞聘演讲稿
2014/08/18 职场文书
2015年生活老师工作总结
2015/05/27 职场文书
推荐六本经典文学奖书籍:此生必读
2019/08/22 职场文书
三星 3nm 芯片将于第二季度开始量产
2022/04/29 数码科技
Spring Boot项目如何优雅实现Excel导入与导出功能
2022/06/10 Java/Android