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

Javascripit类型转换比较那点事儿,双等号(==)

前不久因为一个项目设计的问题,烦心了好几天,为了不留坑拥抱强类型语言特点,还是选择了'==='作为数据判断是否相等,对于'=='今天来探究一下猫腻(弱类型的JavaScript的坑真的太多了,typescript真香)

'==' 操作符

这个操作符相信学过开发的人完全不陌生,对于强类型语言我这儿就不做过多描述,咱们这儿就钻JavaScript的牛角尖

x == y,x,y都表示一个值,这个操作符返回的是bool值true或者false;

对于这个操作有相对应的比较方式(对于所有的JavaScript类型):

1.若type(x)和type(y)相同,则:
    a.若type(x)为undefined,返回true
    b.若type(x)为null,返回true
    c.若type(x)为number,则:
        i.若 x 为NaN,返回false
        ii.若 y 为NaN,返回false
        iii.若 x , y 为相同数值,返回true
        iv.若 x 为 +0且 y 为 -0,返回true
        v.若 x 为 -0且 y 为 +0,返回true
    d.若type(x)为string,则当 x , y 完全为相同字符序列的时候(长度和相同位置的字符一样)返回true
    e.若type(x)为boolean,当 x , y 同为true返回true,否则返回false
 2.若 x 为null且 y 为undefined,返回true
 3.若 x 为undefined且 y 为null,返回true
 4.若type(x)为number且type(y)为string,返回x == ToNumber(y)的结果
 5.若type(x)为string且type(y)为number,返回ToNumber(x) == y的结果
 6.若type(x)为boolean,返回ToNumber(x) == y的结果。同理,若type(y)为boolean,返回ToNumber(y) == x的结果
 7.若type(x)为string或者number,且type(y)为object,返回x == ToPrimitive(y)的结果。同理,若type(y)为string或者number,且type(x)为object,返回y == ToPrimitive(x)的结果

ToPrimitive是对象转换基本类型的方法。

看个例子:

[] == ![] // true
根据上述规则来解析:

1.![]为false,上式为: [] == false

2.第6条:上式为: [] == ToNumber(false) => [] == 0,

3.第7条:上式为:ToPrimitive([]) == 0,

4.[].toString() = '',上式为:'' == 0,

5.第4条:上式为:0 == 0 => true

相关文章:

  • Win7 64位 Hadoop单机模式安装
  • 技术发展面试
  • Android开发者必备:推荐一款助力开发的开源APP
  • 关于for循环的简单归纳
  • MongoDB介绍
  • call apply 和 bind
  • PHP如何在CLI命令模式下连接Postgresql
  • tp5.1 路由获取参数问题总结
  • PIE SDK自定义滤波
  • 关于一对一视频聊天系统的那些干货必备知识
  • python中英文书籍汇总,总有一本是你想要的
  • NeoVim初识
  • redis 系列20 服务器上
  • 非spring框架下使用querydsl
  • Java注解的基本概念和原理及其简单实用
  • 分享一款快速APP功能测试工具
  • 【面试系列】之二:关于js原型
  • 08.Android之View事件问题
  • 2018天猫双11|这就是阿里云!不止有新技术,更有温暖的社会力量
  • egg(89)--egg之redis的发布和订阅
  • ES6系统学习----从Apollo Client看解构赋值
  • JavaScript 无符号位移运算符 三个大于号 的使用方法
  • Java的Interrupt与线程中断
  • jQuery(一)
  • Redis 中的布隆过滤器
  • STAR法则
  • 记一次和乔布斯合作最难忘的经历
  • 入门级的git使用指北
  • 使用API自动生成工具优化前端工作流
  • 使用阿里云发布分布式网站,开发时候应该注意什么?
  • 中文输入法与React文本输入框的问题与解决方案
  • 白色的风信子
  • 函数计算新功能-----支持C#函数
  • ​人工智能书单(数学基础篇)
  • # Python csv、xlsx、json、二进制(MP3) 文件读写基本使用
  • # 日期待t_最值得等的SUV奥迪Q9:空间比MPV还大,或搭4.0T,香
  • #define用法
  • #git 撤消对文件的更改
  • #NOIP 2014#day.2 T1 无限网络发射器选址
  • #快捷键# 大学四年我常用的软件快捷键大全,教你成为电脑高手!!
  • (Redis使用系列) Springboot 实现Redis 同数据源动态切换db 八
  • (第61天)多租户架构(CDB/PDB)
  • (附源码)spring boot球鞋文化交流论坛 毕业设计 141436
  • (十一)图像的罗伯特梯度锐化
  • (太强大了) - Linux 性能监控、测试、优化工具
  • (原創) 未来三学期想要修的课 (日記)
  • (转)一些感悟
  • .bashrc在哪里,alias妙用
  • .NET : 在VS2008中计算代码度量值
  • .NET CF命令行调试器MDbg入门(二) 设备模拟器
  • .NET8.0 AOT 经验分享 FreeSql/FreeRedis/FreeScheduler 均已通过测试
  • .Net高阶异常处理第二篇~~ dump进阶之MiniDumpWriter
  • .net流程开发平台的一些难点(1)
  • @staticmethod和@classmethod的作用与区别
  • [ JavaScript ] JSON方法