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去除重复字符串两种实现方法
Jan 09 Javascript
解决jquery1.9不支持browser对象的问题
Nov 13 Javascript
推荐5 个常用的JavaScript调试技巧
Jan 08 Javascript
微信小程序获取用户openId的实现方法
May 23 Javascript
Angular4项目中添加i18n国际化插件ngx-translate的步骤详解
Jul 02 Javascript
浅析JS中常用类型转换及运算符表达式
Jul 23 Javascript
JS动画定时器知识总结
Mar 23 Javascript
小程序实现带年月选取效果的日历
Jun 27 Javascript
解决Vue axios post请求,后台获取不到数据的问题方法
Aug 11 Javascript
微信小程序实现的日期午别医生排班表功能示例
Jan 09 Javascript
vue实现多条件和模糊搜索功能
May 28 Javascript
jQuery 函数实例分析【函数声明、函数表达式、匿名函数等】
May 19 jQuery
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
谈一谈收音机的高放电路
2021/03/02 无线电
如何获得PHP相关资料
2006/10/09 PHP
用PHP为SHOPEX增加日志功能代码
2010/07/02 PHP
php解析html类库simple_html_dom(详细介绍)
2013/07/05 PHP
Zend Framework教程之连接数据库并执行增删查的方法(附demo源码下载)
2016/03/21 PHP
PHP使用pear实现mail发送功能 windows环境下配置pear
2016/04/15 PHP
one.php 多项目、函数库、类库 统一为一个版本的方法
2020/08/24 PHP
js 获取服务器控件值的代码
2010/03/05 Javascript
flexigrid 参数说明
2010/11/23 Javascript
关于JAVASCRIPT urldecode URL解码的问题
2012/01/08 Javascript
在jquery中combobox多选的不兼容问题总结
2013/12/24 Javascript
利用进制转换压缩数字函数分享
2014/01/02 Javascript
网站繁简切换的JS遇到页面卡死的解决方法
2014/03/12 Javascript
跟我学习javascript的for循环和for...in循环
2015/11/18 Javascript
jquery解析XML及获取XML节点名称的实现代码
2016/05/18 Javascript
AngularJS基础 ng-if 指令用法
2016/08/01 Javascript
NodeJS处理Express中异步错误
2017/03/26 NodeJs
js中的闭包学习心得
2018/02/06 Javascript
vue 实现剪裁图片并上传服务器功能
2018/03/01 Javascript
vue生命周期和react生命周期对比【推荐】
2018/09/19 Javascript
Vue.js组件间通信方式总结【推荐】
2018/11/23 Javascript
解决vue单页面多个组件嵌套监听浏览器窗口变化问题
2020/07/30 Javascript
python中pygame针对游戏窗口的显示方法实例分析(附源码)
2015/11/11 Python
利用Python如何生成随机密码
2016/04/20 Python
Python中的字符串操作和编码Unicode详解
2017/01/18 Python
python wxpython 实现界面跳转功能
2019/12/17 Python
python3中sorted函数里cmp参数改变详解
2020/03/12 Python
用Python在Excel里画出蒙娜丽莎的方法示例
2020/04/28 Python
通过代码实例了解Python3编程技巧
2020/10/13 Python
C#实现启动一个进程
2016/10/01 面试题
后勤人员自我评价怎么写
2013/09/19 职场文书
2014元旦晚会策划方案
2014/02/19 职场文书
协议书怎么写
2014/04/21 职场文书
分公司负责人任命书
2014/06/04 职场文书
三提三创主题教育活动查摆整改措施
2014/10/25 职场文书
2014五年级班主任工作总结
2014/12/05 职场文书