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程序员应该知道的45个实用技巧
Mar 04 Javascript
JQuery设置获取下拉菜单某个选项的值(比较全)
Aug 05 Javascript
js的[defer]和[async]属性
Nov 24 Javascript
express的中间件bodyParser详解
Dec 04 Javascript
jQuery插件制作之全局函数用法实例
Jun 01 Javascript
JS实现点击复选框将按钮或文本框变为灰色不可用的方法
Aug 11 Javascript
JavaScript函数内部属性和函数方法实例详解
Mar 17 Javascript
Javascript 基础---Ajax入门必看
Jul 06 Javascript
浅谈JS正则表达式的RegExp对象和括号的使用
Jul 28 Javascript
原生js获取left值和top值的三种方法
Aug 02 Javascript
详解Angular6 热加载配置方案
Aug 18 Javascript
axios解决高并发的方法:axios.all()与axios.spread()的操作
Nov 09 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版(3)
2006/10/09 PHP
PHP分页显示制作详细讲解
2006/12/05 PHP
简单实现限定phpmyadmin访问ip的方法
2013/03/05 PHP
jQuery+PHP+ajax实现微博加载更多内容列表功能
2014/06/27 PHP
基于CakePHP实现的简单博客系统实例
2015/06/28 PHP
jQuery让控件左右移动的三种实现方法
2013/09/08 Javascript
简介AngularJS的视图功能应用
2015/06/17 Javascript
Vue数据双向绑定的深入探究
2018/11/27 Javascript
layer实现登录弹框,登录成功后关闭弹框并调用父窗口的例子
2019/09/11 Javascript
微信小程序学习总结(三)条件、模板、文件引用实例分析
2020/06/04 Javascript
electron踩坑之dialog中的callback解决
2020/10/06 Javascript
如何在vue中使用kindeditor富文本编辑器
2020/12/19 Vue.js
微信小程序弹窗禁止页面滚动的实现代码
2020/12/30 Javascript
vue项目如何监听localStorage或sessionStorage的变化
2021/01/04 Vue.js
[55:04]海涛DOTA2死魂复燃6.82版本介绍
2014/09/28 DOTA
[57:29]Alliance vs KG 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/17 DOTA
python数据类型_字符串常用操作(详解)
2017/05/30 Python
python爬取cnvd漏洞库信息的实例
2019/02/14 Python
树莓派3 搭建 django 服务器的实例
2019/08/29 Python
树莓派极简安装OpenCv的方法步骤
2019/10/10 Python
Python3.7将普通图片(png)转换为SVG图片格式(网站logo图标)动起来
2020/04/21 Python
python神经网络编程实现手写数字识别
2020/05/27 Python
Python 列表中的修改、添加和删除元素的实现
2020/06/11 Python
Python工程师必考的6个经典面试题
2020/06/28 Python
Pycharm操作Git及GitHub的步骤详解
2020/10/27 Python
ONLY瑞典官网:世界知名服装品牌
2018/06/19 全球购物
职业生涯规划书基本格式
2014/01/06 职场文书
《大自然的语言》教学反思
2014/04/08 职场文书
安全生产月活动总结
2014/05/04 职场文书
公司授权委托书范文
2014/08/02 职场文书
白酒代理协议书范本
2014/10/26 职场文书
教师辞职信范文
2015/02/28 职场文书
培训班开班主持词
2015/07/02 职场文书
经典爱情感言
2015/08/03 职场文书
React-vscode使用jsx语法的问题及解决方法
2021/06/21 Javascript
python区块链实现简版工作量证明
2022/05/25 Python