js中的‘==‘和‘===‘
admin
2024-01-13 00:11:42

js中的'=='和'==='

  • 一、' = = ' 和 ' = = = '的区别
  • 二、一些案例和易错点
    • 2.1 [] = = false 和 ![] = =false
    • 2.2 js中布尔值为false的六种情况
    • 2.3 js中布尔值和数字比较的情况
    • 2.4 两边类型不一样时的比较

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

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

  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的结果。

相关内容

热门资讯

发朋友圈的经典句子,一句话的早... 人若是看透了自己,便不会再小看别人。早安!任何梦想,都需要脚踏实地的去实现。早安!好好把握,每一次的...
人心本无染,心静自然清,生活不... 健康是为我们的事业和我们的福利所必需的。(鸡汤美文)具有强烈自信心的人,是生活中的幸运者。(鸡汤美文...
人需要沉淀,要有足够的时间去反... 这一生你该尊重三种人,一个是把你养大的人,一个是在你跌倒时扶你起来的人,一个是陪你到老的人。如果敌人...
10句温暖的人心的励志语录,大... 这世界上根本不存在“不会做”这回事,当你失去了所有的依靠的时候,自然就什么都会了。雨水落下来,是因为...
狗咬穷,人敬富,财大气粗小瞧人... 人生在世,交友需谨慎,说话不可全露出真心。人的一生,没有几个真正的朋友。(鸡汤美文)即使再有钱,也不...