前两天遇到一道面试题,甚为不解,于是学习了下。

题目:

<script>

var x=5 ;

var y='5' ;

alert(x == y) ;

alert(x !== y) ;

alert(x === y) ;

</script>

结果输入为:true true false

为什么呢?

首先要理解: == ,===区别

==两边值类型不同的时候,要先进行类型转换,再比较。

===不做类型转换,类型不同的一定不等。

==和===的规则如下:

先说===,这个比较简单,具体比较规则如下:

1、如果类型不同,就不相等。

2、如果两个都是数值,并且是同一个值,那么相等;例外的是,如果其中至少一个是NaN,那么不相等。(判断一个值是否是NaN,只能用isNaN()来判断)。

3、如果两个都是字符串,每个位置的字符都一样,那么相等;否则不相等。

4、如果两个值都是true,或者都是false,那么相等。

5、如果两个值都引用同一个对象或函数,那么相等,否则不相等。

6、如果两个值都是null,或者都是undefined,那么相等。

再说==,具体比较规则如下:

1、如果两个值类型相同,进行===比较,比较规则同上。

2、如果两个值类型不同,他们可能相等。根据下面规则进行类型转换再比较:

a、如果一个是null、一个是undefined,那么相等。

b、如果一个是字符串,一个是数值,把字符串转换成数值再进行比较。

c、如果任一值是true,把它转换成1再比较;如果任一值是false,把它转换成0再比较。

d、如果一个是对象,另一个是数值或字符串,把对象转换成基础类型的值再比较。对象转换成基础类型,利用它的toString或者valueOf方法。js核心内置类,会尝试valueOf先于toString;例外的是Date,Date利用的是toString转换。

e、任何其他组合(array数组等),都不相等。

综上所述:

a==b,自动将a,b转型为统一类型后再比较,(将b转换为null类型)故结果:true;

a===b,不会自动转型,直接比较,null,undefined认为是两个不同类型,故结果:false;

js中==和===的区别相关推荐

  1. js中!和!!的区别及用法

    js中!和!!的区别及用法 js中!的用法是比较灵活的,它除了做逻辑运算常常会用!做类型判断,可以用!与上对象来求得一个布尔值, 1.!可将变量转换成boolean类型,null.undefined和 ...

  2. js 中null,undefined区别

    首先摘自阮一峰先生的文章: 大多数计算机语言,有且仅有一个表示"无"的值,比如,C语言的NULL,Java语言的null,Python语言的None,Ruby语言的nil. 有点奇 ...

  3. JS中 ?? 与 || 的区别

    JavaScript 中 ?? 与 || 的区别 相同点 用法相同,都是前后是值,中间用符号连接.根据前面的值来判断最终返回前面的值还是后面的值. 值1 ?? 值2 值1 || 值2 不同点 判断方式 ...

  4. js中==与===的区别

    2019独角兽企业重金招聘Python工程师标准>>> 个人理解:在变量赋值时内存会存储值的类型:做双等号比较操作时,会先做临时类型转换再做比较,内存中存储的值还是原来的不会改变 经 ...

  5. js中===和==的区别

    简单来说:== 代表相同,=== 代表严格相同 这么理解:当进行双等号比较的时候,先检查两个操作数的数据类型,如果相同,则进行 === 比较,如果不同,则愿意为你进行一次类型转换,转换成相同类型后再进 ...

  6. js中的if与Java中的if_JS直接if参数的用法JS中!和!!区别

    经常在JS中见一些代码直接if(参数),然后参数调用的时候是将元素自己传下去.例如下面代码: functiontest1(obj){if(obj){ alert($(obj).val()); }els ...

  7. js和html以及css的区别,html、css、js中的区别与关系

    html.css.js中的区别与关系 2020/04/26 作者: 互盟股份 今天小盟给大家分享的是html.css.js中的区别与关系,相信很多人都不太了解,为了让大家更加了解html.css.js ...

  8. return true Java_[Java教程]js中return,return true,return false的用法及区别

    [Java教程]js中return,return true,return false的用法及区别 0 2015-11-16 23:00:03 1.语法及返回方式 ①返回控制与函数结果 语法为:retu ...

  9. php in循环与for循环,详谈js中标准for循环与foreach(for in)的区别

    js中遍历数组的有两种方式 var array=['a'] //标准的for循环 for(var i=1;i alert(array[i]) } //foreach循环 for(var i in ar ...

最新文章

  1. 1000行 MySQL 学习笔记,不怕你不会,就怕你不学!
  2. mxnet报错解决:AttributeError: module 'mxnet.context' has no attribute 'num_gpus'
  3. android studio 如何提示方法的用法
  4. python中ret是什么意思_数据结构图在python中的应用
  5. 【深度学习入门到精通系列】拿捏Dice系数
  6. 好几天没写Blog了。
  7. shell复习笔记----命令与参数
  8. 前端多图片上传怎么控制顺序_Web前端经典面试题有哪些 如何能走向高薪之路...
  9. 2020-2021家居行业年度盘点与趋势洞察
  10. 本周开课 | 第 5 期全基因组/外显子组家系分析理论和实战
  11. Linux动态库的导出控制
  12. 视觉SLAM-显示相机的位姿
  13. php上传完没进度条_php使用APC实现实时上传进度条功能
  14. ASP.net的PDF打印(水晶报表)[摘]
  15. 整合xfire与struts2 (一)
  16. 采用open***对两台流量卡arm设备进行通讯(公有云)
  17. 高通平台开发系列讲解(USB篇)MBIM驱动详解
  18. html词云图生成,图悦在线词云图制作工具
  19. Hello I am whiter. Nice to meet you!!!
  20. MySQL基础(一)---数据库的诱惑

热门文章

  1. Linux下的用户、组和权限的详细解释
  2. 8. OD-输入错误的信息注册未注册的软件
  3. QT5_数据类型转化
  4. Linux下添加字体(QT可用)
  5. Linux系统编程——僵尸的模拟以及僵尸进程的预防
  6. lightoj 1236 正整数唯一分解定理
  7. 阿里旺旺在线客服代码 贸易通在线状态代码
  8. 用C#委托实现哨兵和敌人的观察者模式!
  9. java怎么快速创建监听类_如何创建监听器
  10. lua游戏开发实践指南光盘_Godot游戏开发实践之三:容易被忽视的Resource