JavaScript关于==隐式转换的判断

一.以下数据类型转布尔值,以下均返回true:

1. 非空字符串

2. 非零数值

3. 数组

4. 对象

5. 函数

二.判断方法:

1. 前提条件:

1) 相等操作符,不同数据类型会根据一定规则转换为同一数据类型再比较

注意: (这里指的数据类型也可能需要转换,总之最后比较时一定是同一数据类型)进行比较

2. 数组与数组比较,比较的是其引用:

a数组==b数组,不管左边和右边的数组是否完全一样,都是false

所以[同理[] == []是false, {} == {}是false

3. 不同类型比较,遇数值则转数值,布尔值自身转数值

1) a为非数字变量:

a==布尔值 =>先将右边的布尔值转化为数字, true是1,false是0;左边a需要转换为数字进行比较; 布尔值==a同理

2) a为非数字变量:

a==数字=>将左边a转化为原始值再转化为数字比较; 数字==a同理

总结:

数组、对象和函数在与其他基本数据类型进行比较时都会先转换为字符串,然后再转换为相应的数据类型

4.非空非零引用型,转为布尔均为真

注意: [], {}转化为布尔值也是true

5. null、undefined和NaN

这三个是个特例,他们比较特殊:

1) null==undefined为true;

2) null和undefined不会进行数据转换;

3) NaN不与任何值相等,甚至包括它自己!

三.实例及分析:

1. []==![]的比较结果是什么?(答案:true)

解析过程:

1) 将右侧[]转换为布尔值后再取反,[]转换布尔值是true,![]相当于true取反为false

2) 根据二判断方法第3条:“比较前需要布尔值转数值”规则,右边的false转换为数字0

3) 根据“比较前数组遇数值先转字符串后转数值”规则,相当于左边[]先使用toString()转换为字符串'',''再转换为数字就是0, 和右边的0比较自然相等

2. [] == []的比较结果是什么?(答案是false)

解析过程: 

根据二判断方法第2条:"数组与数组比较,比较的是其引用", 结果是false

注意: 不管==左右两边是什么类型的数组进行比较,答案都是false

3. 练习题:

let val = [] == ![]console.log(val) // trueconsole.log([+val, [] + 1] == [1, 1] + []) // trueconsole.log([+val, [] + 1] == [1, '1']) // false

解析过程:

/**

* 1. 先看右边, ![]转换为布尔值false

* 2. 一边是布尔值的时候,一边就要转换为数字=>左边[]转换为0

* 3. 右边 =>false转换为数字=>也就是0

* 4. 左边0 == 右边0, 自然结果是true

*/

let val = [] == ![]

console.log(val) // true

/**

* 1. 从上面可知val是true, true遇上+号隐式转换为数字是1

* 2. []+1 => ''+1 => 字符串'1'

* 3. 所以左边是[1, '1']

* 4. 右边: [1,1]+[] => [1,1]+'' =>相当于使用了arr.toString()[效果相当于arr.join(',')] => 得到字符串'1,1'

* 5. 左边也使用使用arr.join(',') => 得到字符串'1,1'

* 6. 左边'1,1' == 右边'1,1', 结果为true

*/

console.log([+val, [] + 1] == [1, 1] + []) // true

// 根据二判断方法第2条:"数组与数组比较,比较的是其引用", 答案都是false

console.log([+val, [] + 1] == [1, '1']) // false

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/91356.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Win11下无法打开丛林之狐,提示未检测到DirectX 8.1

新装的win11系统,打开丛林之狐提示未检测到DirectX 8.1. 运行dxdiag检查DirectX版本: DX版本已经是12了: 最终参考了这篇文章解决了: 罪恶都市出现XX-directx version 8.1处理方法 - 知乎 控制面板 > 程序 > 启用或关闭Wi…

请求代理转发(三)

请求代理转发(三) 书接上回,在内部服务代理其他服务时, 这次使用 webclient 作为请求客户端 import static org.springframework.web.reactive.HandlerMapping.PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE;Slf4j RestController public class ProxyControl…

【Rust】操作日期与时间

目录 介绍 一、计算耗时 二、时间加减法 三、时区转换 四、年月日时分秒 五、时间格式化 介绍 Rust的时间操作主要用到chrono库,接下来我将简单选一些常用的操作进行介绍,如果想了解更多细节,请查看官方文档。 官方文档:chr…

小谈设计模式(6)—依赖倒转原则

小谈设计模式(6)—依赖倒转原则 专栏介绍专栏地址专栏介绍 依赖倒转原则核心思想关键点分析abc 优缺点分析优点降低模块间的耦合度提高代码的可扩展性便于进行单元测试 缺点增加代码的复杂性需要额外的设计和开发工作 Java代码实现示例分析 总结 专栏介绍…

PDF文件压缩软件 PDF Squeezer mac中文版​软件特点

PDF Squeezer mac是一款macOS平台上的PDF文件压缩软件,可以帮助用户快速地压缩PDF文件,从而减小文件大小,使其更容易共享、存储和传输。PDF Squeezer使用先进的压缩算法,可以在不影响文件质量的情况下减小文件大小。 PDF Squeezer…

7、Docker网络

docker网络模式能干嘛? 容器间的互联和通信以及端口映射 容器IP变动时候可以通过服务名直接网络通信而不受到影响 docker 网络模式采用的是桥接模式,当我们创建了一个容器后docker网络就会帮我们创建一个虚拟网卡,这个虚拟网卡和我们的容器网…

【数据结构】队列和栈

大家中秋节快乐,玩了好几天没有学习,今天分享的是栈以及队列的相关知识,以及栈和队列相关的面试题 1.栈 1.1栈的概念及结构 栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作…

UG\NX二次开发 通过点云生成曲面 UF_MODL_create_surf_from_cloud

文章作者:里海 来源网站:《里海NX二次开发3000例专栏》 感谢粉丝订阅 感谢 Rlgun 订阅本专栏,非常感谢。 简介 有网友想做一个通过点云生成曲面的程序,我们也试一下 效果 代码 #include "me.hpp" /*HEAD CREATE_SURF_FROM_CLOUD CCC UFUN */

安全学习_开发相关_Java第三方组件Log4jFastJSON及相关安全问题简介

文章目录 JNDI:(见图) Java-三方组件-Log4J&JNDILog4J:Log4j-组件安全复现使用Log4j Java-三方组件-FastJsonFastJson:Fastjson-组件安全复现对象转Json(带类型)Json转对象Fastjson漏洞复现(大佬文章 JNDI:(见图) …

数据结构与算法之字典: Leetcode 1. 两数之和 (Typescript版)

两数之和 https://leetcode.cn/problems/two-sum/ 描述 给定一个整数数组nums和一个整数目标值target,请你在该数组中找出和为目标值target的那两个整数,并返回它们的数组下标你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在…

C# Task任务详解

文章目录 前言Task返回值无参返回有参返回 async和await返回值await搭配使用Main async改造 Task进阶Task线程取消测试用例超时设置 线程暂停和继续测试用例 多任务等最快多任务全等待 结论 前言 Task是对于Thread的封装,是极其优化的设计,更加方便了我…

PL/SQL+cpolar公网访问内网Oracle数据库

文章目录 前言1. 数据库搭建2. 内网穿透2.1 安装cpolar内网穿透2.2 创建隧道映射 3. 公网远程访问4. 配置固定TCP端口地址4.1 保留一个固定的公网TCP端口地址4.2 配置固定公网TCP端口地址4.3 测试使用固定TCP端口地址远程Oracle 前言 Oracle,是甲骨文公司的一款关系…

php中判断指定字符串是否包含指定字符的封装函数

在 PHP 中,你可以使用内置的字符串函数 strpos() 来判断一个字符串是否包含指定的字符或子字符串。以下是一个简单的封装函数,它使用 strpos() 来判断指定字符串是否包含指定字符,并返回一个布尔值。 function stringContains($string, $cha…

Centos 7分区失败,进入 dracut 页面,恢复操作

1. 问题场景: 分区失败,重启了虚拟机,导致系统进入 dracut 页面。开机显示 直接回车,等待重启失败的页面 自动进入了 dracut 模式(救援)。 2. 临时解决进入系统 查了一下:如果出现 “dracut” 提示、进入 dracut…

jupyterlab

1. 环境:linux 环境(基于ubuntu-fork 镜像实现) 2. pip install jupyter notebook 3. 编译jupyterlab源代码必须使用 node 14.21.3 高版本编译报错#下载 node 14.21.3 :wget https://nodejs.org/download/release/latest-v14.x/node-v14.21.…

elementui 菜单选中优化

/** 父级菜单悬浮样式**/ .el-submenu__title:hover {color:#1890ff!important; } /** 父级菜单箭头悬浮样式**/ .el-submenu__title:hover>.el-submenu__icon-arrow{font-size: 13px!important;} /** 子菜单悬浮样式**/ .el-menu-item:hover{color:#1890ff!important; } /*…

数据结构算法--6 希尔排序和计数排序

希尔排序 希尔排序与插入排序原理相同,希尔排序是一种分组插入排序算法 > 首先取一个整数d1n/2,将元素分为d1个组,每组相邻两元素之间距离为d1,在各组内之间插入排序。 > 取第二个整数d2n/2,重复上述分组排序…

Golang必知必会Go Mod命令

文章目录 一、go mod 是什么?二、详细命令 1. init2.download3.tidy4.graph5.edit6.vendor7.verify8.why 总结 一、go mod 是什么? go modules 官方定义为: 模块是相关Go包的集合。modules是源代码交换和版本控制的单元。 go命令直接支持使用…

VBA技术资料MF62:创建形状添加文本及设置颜色

【分享成果,随喜正能量】须知往生净土,全仗信、愿。有信、愿,即未得三昧、未得一心不乱,亦可往生。且莫只以一心不乱,及得念佛三昧为志事,不复以信、愿、净念为事。。 我给VBA的定义:VBA是个人…

英语单词记忆学习打卡系统 微信小程序

本单词记忆系统使用了计算机语言Java和存放数据的仓库MySQL,采用了微信小程序模式来实现。本系统使用了框架SSM和Uni-weixin实现了单词记忆系统应有的功能,系统主要角色包括管理员和用户。 关键词:Java;MySQL;SSM  在…