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移动div层-javascript 拖动层
Mar 22 Javascript
一些老手都不一定知道的JavaScript技巧
May 06 Javascript
jQuery 1.9使用$.support替代$.browser的使用方法
May 27 Javascript
JavaScript Math.ceil 方法(对数值向上取整)
Jan 09 Javascript
javascript自动生成包含数字与字符的随机字符串
Feb 09 Javascript
jquery图形密码实现方法
Mar 11 Javascript
初步使用bootstrap快速创建页面
Mar 03 Javascript
基于JavaScript实现添加到购物车效果附源码下载
Aug 22 Javascript
深入理解ES6 Promise 扩展always方法
Sep 26 Javascript
vue2 拖动排序 vuedraggable组件的实现
Aug 08 Javascript
解决vue scoped html样式无效的问题
Oct 24 Javascript
js实现抽奖功能
Nov 24 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中使用gettext来支持多语言的方法
2011/05/02 PHP
Javascript 中介者模式实例
2009/12/16 Javascript
JavaScript 语言的递归编程
2010/05/18 Javascript
一个收集图片的bookmarlet(js 刷新页面中的图片)
2010/05/27 Javascript
JQuery从头学起第一讲
2010/07/04 Javascript
向左滚动文字 js代码效果
2013/08/17 Javascript
php跨域调用json的例子
2013/11/13 Javascript
EasyUI布局 高度自适应
2016/06/04 Javascript
jQuery弹出层插件popShow用法示例
2017/01/23 Javascript
Angular js 实现添加用户、修改密码、敏感字、下拉菜单的综合操作方法
2017/10/24 Javascript
微信小程序实现随机验证码功能
2018/12/20 Javascript
微信小程序自定义导航栏实例代码
2019/04/05 Javascript
详解微信小程序的不同函数调用的几种方法
2019/05/08 Javascript
D3.js(v3)+react 实现带坐标与比例尺的柱形图 (V3版本)
2019/05/09 Javascript
Vue使用Proxy监听所有接口状态的方法实现
2019/06/07 Javascript
Python实现扫描局域网活动ip(扫描在线电脑)
2015/04/28 Python
Python中matplotlib中文乱码解决办法
2017/05/12 Python
python+splinter实现12306网站刷票并自动购票流程
2018/09/25 Python
Python数据可视化之画图
2019/01/15 Python
python list转置和前后反转的例子
2019/08/26 Python
Django中的FBV和CBV用法详解
2019/09/15 Python
学点简单的Django之第一个Django程序的实现
2021/02/24 Python
浅谈CSS3 box-sizing 属性 有趣的盒模型
2019/04/02 HTML / CSS
amaze ui 的使用详细教程
2020/08/19 HTML / CSS
香港最大的洋酒零售连锁店:屈臣氏酒窖(Watson’s Wine)
2018/12/10 全球购物
卡骆驰德国官方网站:Crocs德国
2019/03/29 全球购物
介绍一下linux的文件权限
2014/07/20 面试题
同步和异步有何异同,在什么情况下分别使用他们?
2012/12/28 面试题
如何打造一封优秀的留学推荐信
2014/01/25 职场文书
交通事故委托书范本
2014/09/28 职场文书
2014年第四季度入党积极分子思想汇报(十八届四中全会)
2014/11/03 职场文书
幼儿园园长新年寄语2015
2014/12/08 职场文书
2015年幼儿园元旦游艺活动策划书
2014/12/09 职场文书
物业接待员岗位职责
2015/04/15 职场文书
JavaScript嵌入百度地图API的最详细方法
2021/04/16 Javascript
python中urllib包的网络请求教程
2022/04/19 Python