js中的‘==‘和‘===‘


秋招笔试面试起来就又有点顾不上学习了,就简单总结一下最近面试遇到的一个点吧~

一、’ = = ’ 和 ’ = = = '的区别

  1. 对于基础数据类型来说
    1)不同类型间比较,= =会将值转化成同一类型后的值”看“值”是否相等,= = =如果类型不同,其结果就是不等
    2)同类型比较,直接进行“值”比较,两者结果一样
  2. 对于Array,Object等高级类型,= =和= = =是没有区别的。都是对“指针地址”的比较

二、一些案例和易错点

2.1 [] = = false 和 ![] = =false

  • ![] 这是逻辑运算,[] == false 则是比较运算

[] 空数组对象为真,对真取反,那么得到的就是 假,所以 ![] 得到的是 false

![] //false
![] == false  //true
![] === false //true
![] == true //false
  • [] = = false是比较运算,会先调用数组对象的toString()方法,然后拿toString()的返回值’'再进
    行比较。而[].toString()的返回值是空字符串"。那么空字符串与false进行比较,得到的就是
    真。也就是"== false的结果为true。
[] == false //true
[] === false //false

2.2 js中布尔值为false的六种情况

  1. undefined(未定义,找不到值时出现)
  2. null(代表空值)
  3. false(布尔值的false,字符串"false"布尔值为true)
  4. 0(数字0,字符串"0"布尔值为true)
  5. NaN(无法计算结果时出现,表示"非数值";但是typeof NaN===“number”)
  6. “”(双引号)或’'(单引号) (空字符串,中间有空格时也是true)
Boolean(undefined) //false
Boolean(null)  //false
Boolean(0)  //false
Boolean(NaN)  //false
Boolean('')  //false
Boolean("")  //false

但是

undefined == false //false
null == false //false
NaN == false //false
NaN == true //false
NaN == NaN //false
Number('a') == Number('a') //false
Number('') == Number('') //true
Number('') ==0 //true
  • JS中的==对两边的对象进行比较时,undefined将被转换成数字,也就是说,undefined被看成基本值 。而又由于undefined转换成数字为NaN,所以将Number,String,Boolean这三种类型与undefined比较时,总是返回false
  • 而对于null,JS则将其当成对象来比较,即尝试调用null的valueOf与toString方法,再将返回的结果与另一个值进行比较,可以推null==false返回false的原因是因为null的valueOf实现导致的 。由于null没有valueOf与toString方法,因此始终返回false
  • NaN 是一种特殊的数值类型的值,它表示 not a number,即表示非数字值。而NaN == NaN为false ,这是因为NaN是一个非数字值,每个非数字值是不同的
  • Number([value])把其他数据类型转换为number数字类型。当字符串转换为数字:空字符串是0 如果字符串中出现任意一个非有效数字时,输出都是NaN

2.3 js中布尔值和数字比较的情况

如果有一个操作数是布尔值,则在比较相等性之前先将其转换为数值——false转换为0,而true转换为1

-1 == true //false
2 == true //false
1 == true //true
0 == false // true

2.4 两边类型不一样时的比较

'' == '0'   // false  因为同类型,string类型
0 == ''    // true

因为JavaScript是一种弱类型的语言,而在判断’'= =0时,因为两边的类型不一致,所以在进行判断时,会将两边转换成boolean类型后,再进行判断。因为空字符转换成boolean类型就是false,而0转换成boolean类型也是false。所以就会出现false==false等于true的结果。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值