当前位置: 首页 > news >正文

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

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

相关文章:

  • 一起来部署项目-采购一台云服务器
  • 【老生谈算法】matlab实现抽样定理算法源码——抽样定理
  • [从0开始机器学习]4.线性回归 正规方程
  • RayVentory以改进IT的分析,RayVentory原始数据之间轻松切换
  • Oracle 递归案例
  • Python编程 print输出函数
  • WordPress JSON REST API OAuth 1.0 认证获取Authorization Basic 码+Python api 创建文章(一)
  • 力扣 每日一题 1235. 规划兼职工作【难度:困难,rating: 2022】(动态规划+二分查找)
  • 数据挖掘-模型的评估(四)
  • 开源远程桌面软件_RustDesk_(可自建远程桌面服务器)
  • 【Django框架】——11 Django模型——02创建模型类
  • 【考研】暨南大学 848 操作系统简答题(2020-2022)
  • docker-compose部署hive、kafka服务
  • @Import注解详解
  • 基于springboot+vue的美食分享网站
  • Apache Spark Streaming 使用实例
  • es6
  • hadoop集群管理系统搭建规划说明
  • JS进阶 - JS 、JS-Web-API与DOM、BOM
  • Sass 快速入门教程
  • Vue2.0 实现互斥
  • 从0实现一个tiny react(三)生命周期
  • 技术胖1-4季视频复习— (看视频笔记)
  • 今年的LC3大会没了?
  • 警报:线上事故之CountDownLatch的威力
  • 聊聊flink的TableFactory
  • 码农张的Bug人生 - 见面之礼
  • 什么软件可以提取视频中的音频制作成手机铃声
  • 为视图添加丝滑的水波纹
  • 阿里云IoT边缘计算助力企业零改造实现远程运维 ...
  • 如何在 Intellij IDEA 更高效地将应用部署到容器服务 Kubernetes ...
  • 新海诚画集[秒速5センチメートル:樱花抄·春]
  • #我与Java虚拟机的故事#连载07:我放弃了对JVM的进一步学习
  • (16)Reactor的测试——响应式Spring的道法术器
  • (SpringBoot)第二章:Spring创建和使用
  • (windows2012共享文件夹和防火墙设置
  • (差分)胡桃爱原石
  • (第二周)效能测试
  • (附源码)spring boot基于Java的电影院售票与管理系统毕业设计 011449
  • (附源码)spring boot校园拼车微信小程序 毕业设计 091617
  • (南京观海微电子)——COF介绍
  • (求助)用傲游上csdn博客时标签栏和网址栏一直显示袁萌 的头像
  • (四)库存超卖案例实战——优化redis分布式锁
  • (新)网络工程师考点串讲与真题详解
  • (原創) 物件導向與老子思想 (OO)
  • (转)es进行聚合操作时提示Fielddata is disabled on text fields by default
  • (最全解法)输入一个整数,输出该数二进制表示中1的个数。
  • .cfg\.dat\.mak(持续补充)
  • .L0CK3D来袭:如何保护您的数据免受致命攻击
  • .net 8 发布了,试下微软最近强推的MAUI
  • .NET/C# 避免调试器不小心提前计算本应延迟计算的值
  • .Net小白的大学四年,内含面经
  • .sdf和.msp文件读取
  • @德人合科技——天锐绿盾 | 图纸加密软件有哪些功能呢?
  • []我的函数库