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最新动画教程+iso光盘下载
Jan 22 Javascript
jquery 如何动态添加、删除class样式方法介绍
Nov 07 Javascript
浅谈jQuery中Ajax事件beforesend及各参数含义
Dec 03 Javascript
百度地图API之百度地图退拽标记点获取经纬度的实现代码
Jan 12 Javascript
Bootstrap3 多个模态对话框无法显示的解决方案
Feb 23 Javascript
js常用的继承--组合式继承
Mar 06 Javascript
Centos6.8下Node.js安装教程
May 12 Javascript
Vue 2.0在IE11中打开项目页面空白的问题解决
Jul 16 Javascript
详解AngularJS跨页面传值(ui-router)
Aug 23 Javascript
jQuery实现带右侧索引功能的通讯录示例【附源码下载】
Apr 17 jQuery
详解jQuery获取特殊属性的值以及设置内容
Nov 14 jQuery
layer 关闭指定弹出层的例子
Sep 25 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中session与cookie的比较
2015/01/27 PHP
php好代码风格的阶段性总结
2016/06/25 PHP
php图片合成方法(多张图片合成一张)
2017/11/25 PHP
javascript DOM编程实例(智播客学习)
2009/11/23 Javascript
返回页面顶部top按钮通过锚点实现(自写)
2013/08/30 Javascript
js 删除数组的几种方法小结
2014/02/21 Javascript
javascript 获取元素样式必杀技
2014/05/04 Javascript
用Jquery选择器计算table中的某一列某一行的合计
2014/08/13 Javascript
学习JavaScript设计模式之策略模式
2016/01/12 Javascript
学习JavaScript设计模式之模板方法模式
2016/01/20 Javascript
bootstrap和jQuery.Gantt的css冲突 如何解决
2016/05/29 Javascript
使用jquery判断一个元素是否含有一个指定的类(class)实例
2017/02/12 Javascript
canvas绘图不清晰的解决方案
2017/02/28 Javascript
微信小程序商城项目之淘宝分类入口(2)
2017/04/17 Javascript
js中this的指向问题归纳总结
2018/11/28 Javascript
详解Vue调用手机相机和相册以及上传
2019/05/05 Javascript
Vue +WebSocket + WaveSurferJS 实现H5聊天对话交互的实例
2020/11/18 Vue.js
浅析python递归函数和河内塔问题
2017/04/18 Python
python与sqlite3实现解密chrome cookie实例代码
2018/01/20 Python
利用python如何处理nc数据详解
2018/05/23 Python
Python文件常见操作实例分析【读写、遍历】
2018/12/10 Python
python 切换root 执行命令的方法
2019/01/19 Python
详解Python中pandas的安装操作说明(傻瓜版)
2019/04/08 Python
在python 中split()使用多符号分割的例子
2019/07/15 Python
python生成随机红包的实例写法
2019/09/02 Python
Pytorch 的损失函数Loss function使用详解
2020/01/02 Python
Python StringIO及BytesIO包使用方法解析
2020/06/15 Python
python使用正则表达式匹配txt特定字符串(有换行)
2020/12/09 Python
美丽的现代设计家具:2Modern
2018/07/26 全球购物
写给爸爸的道歉信
2014/01/15 职场文书
采购求职信
2014/03/17 职场文书
民主评议党员工作总结
2014/10/20 职场文书
2014年纳税评估工作总结
2014/12/23 职场文书
webpack的移动端适配方案小结
2021/07/25 Javascript
python 安全地删除列表元素的方法
2022/03/16 Python
如何Python使用re模块实现okenizer
2022/04/30 Python