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 相关文章推荐
用js生产批量批处理执行命令
Jul 28 Javascript
用javascript getComputedStyle获取和设置style的原理
Oct 10 Javascript
javascript 静态对象和构造函数的使用和公私问题
Mar 02 Javascript
jQuery 全选/反选以及单击行改变背景色实例
Jul 02 Javascript
Angularjs实现多个页面共享数据的方式
Mar 29 Javascript
Node.js 文件夹目录结构创建实例代码
Jul 08 Javascript
JS实现图片放大缩小的方法
Feb 15 Javascript
three.js中文文档学习之通过模块导入
Nov 20 Javascript
vue.js中ref和$refs的使用及示例讲解
Aug 14 Javascript
微信小程序HTTP接口请求封装代码实例
Sep 05 Javascript
vuex state中的数组变化监听实例
Nov 06 Javascript
JavaScript实现缓动动画
Nov 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
加速XP搜索功能堪比vista
2007/03/22 PHP
深入PHP变量存储的详解
2013/06/13 PHP
magento后台无法登录解决办法的两种方法
2016/12/09 PHP
PHP实现二叉树深度优先遍历(前序、中序、后序)和广度优先遍历(层次)实例详解
2018/04/20 PHP
javascript 命名规则 变量命名规则
2010/02/25 Javascript
javascript与CSS复习(三)
2010/06/29 Javascript
javascript中不等于的代码是什么怎么写
2013/12/29 Javascript
javascript中的this详解
2014/12/08 Javascript
JavaScript实现显示函数调用堆栈的方法
2016/04/21 Javascript
jQuery与JavaScript节点创建方法的对比
2016/11/18 Javascript
jQuery中的$是什么意思及 $. 和 $().的区别
2018/04/20 jQuery
使用vue.js在页面内组件监听scroll事件的方法
2018/09/11 Javascript
angularJs利用$scope处理升降序的方法
2018/10/08 Javascript
原生JS实现手动轮播图效果实例代码
2018/11/22 Javascript
vscode调试node.js的实现方法
2020/03/22 Javascript
js实现无刷新监听URL的变化示例代码详解
2020/06/03 Javascript
详解Python的Django框架中的中间件
2015/07/24 Python
Python使用django框架实现多人在线匿名聊天的小程序
2017/11/29 Python
Python实现生成随机日期字符串的方法示例
2017/12/25 Python
Python实战之制作天气查询软件
2019/05/14 Python
python支付宝支付示例详解
2019/08/22 Python
通过实例解析python描述符原理作用
2020/01/22 Python
keras模型保存为tensorflow的二进制模型方式
2020/05/25 Python
python3爬虫中引用Queue的实例讲解
2020/11/24 Python
详解HTML5 LocalStorage 本地存储
2016/12/23 HTML / CSS
CK美国官网:Calvin Klein
2016/08/26 全球购物
互动出版网:专业书籍
2017/03/21 全球购物
阿联酋航空官方网站:Emirates
2017/10/17 全球购物
党校自我鉴定范文
2013/10/02 职场文书
建筑毕业生自我鉴定
2013/10/18 职场文书
校友会欢迎辞
2014/01/13 职场文书
大学生开西餐厅创业计划书
2014/02/01 职场文书
关于母亲节的感言
2014/02/04 职场文书
社区班子个人对照检查材料思想汇报
2014/10/07 职场文书
2016年“世界气象日”广播稿
2015/12/17 职场文书
dubbo服务整合zipkin详解
2021/07/26 Java/Android