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校验价格合法性实例(必须输入2位小数)
May 05 Javascript
理解Javascript的动态语言特性
Jun 17 Javascript
使用react-router4.0实现重定向和404功能的方法
Aug 28 Javascript
JS跳转手机站url的若干注意事项
Oct 18 Javascript
js实现Tab选项卡切换效果
Jul 17 Javascript
浅谈webpack打包生成的bundle.js文件过大的问题
Feb 22 Javascript
对angular2中的ngfor和ngif指令嵌套实例讲解
Sep 12 Javascript
vue 对象添加或删除成员时无法实时更新的解决方法
May 01 Javascript
实现高性能javascript的注意事项
May 27 Javascript
利用vue-i18n实现多语言切换效果的方法
Jun 19 Javascript
解决vue打包后刷新页面报错:Unexpected token
Aug 27 Javascript
稍微学一下Vue的数据响应式(Vue2及Vue3区别)
Nov 21 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引用效率问题分析
2012/03/23 PHP
基于PHP+Ajax实现表单验证的详解
2013/06/25 PHP
php类声明和php类使用方法示例分享
2014/03/29 PHP
PHP实现通过Luhn算法校验信用卡卡号是否有效
2015/03/23 PHP
CI框架AR操作(数组形式)实现插入多条sql数据的方法
2016/05/18 PHP
PHP文件上传、客户端和服务器端加限制、抓取错误信息、完整步骤解析
2017/01/12 PHP
不用AJAX和IFRAME,说说真正意义上的ASP+JS无刷新技术
2008/09/25 Javascript
Extjs学习笔记之五 一个小细节renderTo和applyTo的区别
2010/01/07 Javascript
JavaScript 学习笔记(十四) 正则表达式
2010/01/22 Javascript
js FLASH幻灯片字符串中有连接符&的处理方法
2012/03/01 Javascript
js数字转换为float,取N位小数
2014/02/08 Javascript
js 模仿锚点定位的实现方法
2016/11/19 Javascript
利用纯js + transition动画实现移动端web轮播图详解
2017/09/10 Javascript
js 客户端打印html 并且去掉页眉、页脚的实例
2017/11/03 Javascript
js经验分享 JavaScript反调试技巧
2018/03/10 Javascript
vue项目打包后打开页面空白解决办法
2018/06/29 Javascript
vue基础之事件简写、事件对象、冒泡、默认行为、键盘事件实例分析
2019/03/11 Javascript
vue动态渲染svg、添加点击事件的实现
2020/03/13 Javascript
Vue脚手架编写试卷页面功能
2020/03/17 Javascript
JS获取当前时间戳方法解析
2020/08/29 Javascript
python日志记录模块实例及改进
2017/02/12 Python
Python最火、R极具潜力 2017机器学习调查报告
2017/12/11 Python
Python3对称加密算法AES、DES3实例详解
2018/12/06 Python
python 定时任务去检测服务器端口是否通的实例
2019/01/26 Python
Python如何使用OS模块调用cmd
2020/02/27 Python
Django admin 实现search_fields精确查询实例
2020/03/30 Python
详解webapp页面滚动卡顿的解决办法
2018/12/26 HTML / CSS
八皇后问题,输出了所有情况,不过有些结果只是旋转了90度
2016/08/15 面试题
大学生收银员求职信分享
2014/01/02 职场文书
销售助理岗位职责
2014/02/21 职场文书
中药学专业毕业生推荐信
2014/07/10 职场文书
基层党员对照检查材料
2014/08/25 职场文书
12.4全国法制宣传日活动总结
2014/11/01 职场文书
2014年党风建设工作总结
2014/11/19 职场文书
医院员工辞职信范文
2015/05/12 职场文书
教师思想工作总结2015
2015/05/13 职场文书