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_01_isPlainObject分析与重构
Oct 20 Javascript
javascript开发技术大全-第1章javascript概述
Jul 03 Javascript
Javascript中的delete介绍
Sep 02 Javascript
JS实现悬浮移动窗口(悬浮广告)的特效
Mar 12 Javascript
在浏览器中实现图片粘贴的jQuery插件-- pasteimg使用指南
Dec 29 Javascript
Jquery判断radio、selelct、checkbox是否选中及获取选中值方法总结
Apr 15 Javascript
Node.js中多进程模块Cluster的介绍与使用
May 27 Javascript
bootstrap table实现双击可编辑、添加、删除行功能
Sep 27 Javascript
Angular实现可删除并计算总金额的购物车功能示例
Dec 26 Javascript
微信小程序学习总结(一)项目创建与目录结构分析
Jun 04 Javascript
JavaScript实现鼠标经过表格某行时此行变色
Nov 20 Javascript
Vue实现购物小球抛物线的方法实例
Nov 22 Vue.js
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 json格式和js json格式 js跨域调用实现代码
2012/09/08 PHP
体育彩票排列三组选三算法分享
2014/03/07 PHP
如何用PHP来实现一个动态Web服务器
2015/07/29 PHP
深入理解PHP内核(二)之SAPI探究
2015/11/10 PHP
php远程下载类分享
2016/04/13 PHP
PHP使用openssl扩展实现加解密方法示例
2020/02/20 PHP
JS location几个方法小姐
2008/07/09 Javascript
JS 中document.URL 和 windows.location.href 的区别
2009/11/11 Javascript
Wordpress ThickBox 点击图片显示下一张图的修改方法
2010/12/11 Javascript
妙用Jquery的val()方法
2012/06/27 Javascript
jquery实现微博文字输入框 输入时显示输入字数 效果实现
2013/07/12 Javascript
javascript中局部变量和全局变量的区别详解
2015/02/27 Javascript
详解JavaScript基于面向对象之创建对象(1)
2015/12/10 Javascript
JavaScript实现水平进度条拖拽效果
2017/01/18 Javascript
微信小程序上传图片到服务器实例代码
2017/11/07 Javascript
深入浅析Vue中的slots/scoped slots
2018/04/03 Javascript
mpvue 如何使用腾讯视频插件的方法
2018/07/16 Javascript
vue将单页面改造成多页面应用的方法
2018/11/25 Javascript
Vue动态组件与异步组件实例详解
2019/02/23 Javascript
nodejs中实现修改用户路由功能
2019/05/24 NodeJs
javascript面向对象程序设计实践常用知识点总结
2019/07/29 Javascript
python备份文件的脚本
2008/08/11 Python
python动态网页批量爬取
2016/02/14 Python
Python实现计算最小编辑距离
2016/03/17 Python
详解Python多线程
2016/11/14 Python
python爬虫系列Selenium定向爬取虎扑篮球图片详解
2017/11/15 Python
Pytorch实验常用代码段汇总
2020/11/19 Python
简述进程的启动、终止的方式以及如何进行进程的查看
2013/07/12 面试题
旅游文化节策划方案
2014/06/06 职场文书
2014年党的群众路线整改措施思想汇报
2014/10/12 职场文书
教师师德表现自我评价
2015/03/05 职场文书
医药公司开票员岗位职责
2015/04/15 职场文书
家长会主持词开场白
2015/05/29 职场文书
2016春季运动会开幕词
2016/03/04 职场文书
创业计划书之家教托管
2019/09/25 职场文书
ubuntu如何搭建vsftpd服务器
2022/12/24 Servers