JavaScript面试考点-==与===判断

最近在准备面试,复习过程中想起之前字节面试的一道非常有意思,并且知识点比较全面细节的一道题,面试官当时问的是 [] == !([]) 应该返回什么,被问的有点傻,后面面试官提示了自己下面又看了以后理解,把这个有趣的题给大家分享一下。

首先说一下 ==和===

==:

        相等操作符会对操作值进行隐式转换后进行比较

         1、布尔值、字符串和数值进行比较,转换为数值之后在进行比较 

         2、null与undefined是相等的

         3、与NaN判等,返回false

===:

        全等操作符不会进行隐式转换,而是直接比较        

  (1)如果类型不同,就一定不相等

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

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

  (4)如果两个值都是true,或是false,那么相等

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

  (6)如果两个值都是null,或是undefined,那么相等

TIPS: == 和 === 区别

          1、对于Array,Object等高级类型,两者无区别:进行“地址”比较(这涉及到基本数据类型和引用数据类型的区别,之后的文章我也会继续讲解)

          2、对于基础类型==判断值是否相等,===不仅判断值,而且判断类型是否相等。

          3、基础类型与高级类型有区别:==将高级类型转化为基础类型,进行“值”比较,===直接返回false

1、Boolean([]) //true  空数组转换为布尔值是true

2、优先级问题: !运算符的优先级 高于==运算符(这类题需要格外注意运算符的优先级)

3、==运算符会进行隐式转换数值(也就是在比较前会把==两边的值转换成number)

所以,整个等式比较的流程就是:

1.先是转换位布尔值,Boolean(![]) = false;

2.等式变为 [] == false;

3.然后再转换为数值, Number([]) == Number(false)

4.最终得到 0 == 0,return true

然后再给大家讲一下,[] == []的问题

由于Array,Func,Object都属于引用数据类型,其在栈内存中存储的仅为其堆内存中内容的地址指针,当遇到相同引用数据类型相等判断的时候,由于其根本上是两个不同堆内存在栈内存上的映射,所以会返回false,可以理解为没有相同的两个Object,只要记住这个就好。

这个题还是很有趣的,考察了 ==和===的区别运算符的优先级问题基本数据类型和引用数据类型的区别以及隐式转换的问题,属于是非常有价值的题目,大家可以好好参透理解,之后也会继续给大家分享我的前端面经~

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值