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

宽松相等(==) 的转换规则(仅考虑基本数据类型)

在js中,比较两个变量是否相等常见的方法有两种,一个是宽松相等“==”,另一个是严格相等"==="。

这两个的区别在于:

        宽松相等:仅比较值是否相等,并且会进行一定的类型隐式转换,将两侧转换为相同类型后再比较。

        严格相等:比较值和地址是否都相等,不会进行类型转换。

而在使用宽松相等时,类型的转换却有些难以把握。比如:

console.log(1=='1')//true

console.log(1=='a')//false

console.log(true=='true')//false

console.log(false=="")//true

我们都知道,空字符串、false、0、undefined、null转换为布尔类型都是false,其他转成布尔类型都是true。但是从上面几个例子中可以看到,好像并不是这么回事,比如true==’true‘,按照转换规则来说应该是true,但是打印出的确实false。下面就是一些通过学习、查询和测试得到的一些规则。

规律总结:

1.当类型相同时,值相同则为true,不同则为false,Symbol类型除外,Symbol类型比较都会输出false,因为Symbol表示的每个都是唯一值

2.当类型不同时:

2.1.如果布尔类型和字符串或数字相比,true会被转换成1,false会被转换为0;字符串会尝试转换为数字,不能转换则为NaN,然后比较转换后的数字。

console.log(true=='1')//true
console.log(true=='2')//false
console.log(true=='0')//false
console.log(true=='')//false
console.log(false=='')//true
console.log(false=='0')//true
console.log(false=='1')//false
console.log(true==0)//false
console.log(true==1)//true
console.log(false==0)//true
console.log(false==1)//false

2.2.如果比较双方一个是数字,一个是字符串,那么会尝试将字符串转换为数字,如果不能转换为数字则会转换为NaN,然后比较转换后的数字

console.log(1=='1')//true
console.log(1=='2')//false
console.log(1=='0')//false
console.log(1=='a')//false
console.log(0=='0')//true
console.log(0=='1')//false
console.log(0=='2')//false
console.log(0=='a')//false
console.log(2=='0')//false
console.log(2=='1')//false
console.log(2=='2')//true
console.log(2=='a')//false

2.3.null、undefined和Symbol:null与undefined比较为true(js中一个特殊规则),null、undefined、Symbol与其他类型比较均为false。

http://www.xdnf.cn/news/610453.html

相关文章:

  • 怎么判断一个Android APP使用了Ionic这个跨端框架
  • 智能交通红绿灯系统(Python)
  • TCP 三次握手,第二次握手报文丢失会发生什么?
  • IP隧道技术中数据包头部的变化分析:必然增加的封装机制
  • (15)关于窗体的右键菜单的学习与使用,这关系到了信号与事件 event
  • 特殊的完全平方数
  • 【MySQL】 数据库基础数据类型
  • 【c++】: c++11线程库
  • 【Hexo】3.主题
  • Kafka 集群中,Broker和Controller的关系
  • TPDS-2014《Efficient $k$-means++ Approximation with MapReduce》
  • Python匿名函数(lambda)全面详解
  • 黑马k8s(十三)
  • 【机械视觉】Halcon—【二、Halcon算子全面介绍(超详细版)】
  • 免费AI工具整理
  • HarmonyOS NEXT 使用 relationalStore 实现数据库操作
  • 文章记单词 | 第113篇(六级)
  • 数据挖掘算法大汇总
  • AI推介-大语言模型LLMs论文速览(arXiv方向):2024.12.20-2024.12.25
  • 什么是DAQ采集卡?它的优势有哪些?
  • 【Qt开发】显示类控件——QLCDNumber
  • 搭配前端食用
  • Day34 Python打卡训练营
  • 28-FreeRTOS内核控制-延时-临界区
  • MCP如何助力智能交通系统?从数据融合到精准决策
  • 科技初创企业创新推动商业未来
  • 单元测试学习笔记
  • mqtt协议(cJSON格式举例)
  • 交换机的连接方式堆叠和级联
  • 3D个人简历网站 6.弹出框