JS中 [] == ![]结果为true,而 {} == !{}却为false

为什么?
先转换再比较 (==)
仅比较而不转换 (===)
==转换规则?
==比较运算符会先转换操作数(强制转换),然后再进行比较
①如果有一个操作数是布尔值,则在比较相等性之前先将其转换为数值——false转换为0,而true转换为1;
②如果一个操作数是字符串,另一个操作数是数值,在比较相等性之前先将字符串转换为数值;
在双等号 左右两边类型相等时 采用三等号也就是严格运算符的判定规则
[ ] == ![ ]
解题思路?
![] 会变成 false,false会变成0;也就是==右侧 是 0;
==在进行比较前,如果有一侧是数字,会将另一侧也转化为数字类型,才会进行比较。
Number([]) // 0; 先在等号左侧也是0
两侧都是0 所以是true。
[] == ![] -> [] == false -> [] == 0; ==右侧的转换
因为右侧是数字,所以左侧也要转换为数字类型,才会进行比较
Number([]) == 0 -> 0 == 0 //true
[] == [] // false
在双等号 左右两边类型相等时 采用三等号也就是严格运算符的判定规则
对于对象(数组也是对象)只看双方地址,地址一样则返回true,所以[]===[]地址不一样,返回fasle。
{} == !{} // false
{} == !{} --> {} == false --> {} == 0; 等号右侧侧的转化
因为双等号比较前,会先转化为相同的类型,所以左侧也要转为数字类型
Number( {} ) == 0 --> NaN == 0 //false
NaN和任何数字比都是false,所以{} == !{} // false

JS中 [] == ![]结果为true,而 {} == !{}却为false的更多相关文章
- python中1 is True 的结果为False,is判断与==判断的区别
python中1 is True 的结果为False,而1 == True的结果为True. python中True的数值就是1,那为什么1 is True 的结果为False呢? 因为is判断和== ...
- js中return ,return true,return false;区别
js中return:.return true.return false;区别 转:https://www.cnblogs.com/camikehuihui/p/7999537.html 一.返回控制与 ...
- JS中字符串的true转化为boolean类型的true
var a="True"; a = eval(a.toLowerCase()); alert(typeof a); //boolean alert(a);//true 正解,eva ...
- js中对象转化成字符串、数字或布尔值的转化规则
js中对象可以转化成 字符串.数字.布尔值 一.对象转化成字符串: 规则: 1.如果对象有toString方法,则调用该方法,并返回相应的结果:(代码通常会执行到这,因为在所有对象中都有toStrin ...
- 字符串0.在php和js中转换为布尔类型 值是false还是true
在php 中 $a = '0'; $b = (bool)$a; var_dump($a);//输出false 在js中官方说明: Note:If the value parameter is omit ...
- js中的return,return true,return false小结
return 函数执行到这句时会终结,并返回调用函数,而且把表达式的值作为函数的结果返回 return false 可以防止默认的事件行为.例如,默认情况下点击一个<a>元素,页面会跳转 ...
- js中return、return true、return false的区别
一.返回控制与函数结果, 语法为:return 表达式; 语句结束函数执行,返回调用函数,而且把表达式的值作为函数的结果 二.返回控制, 无函数结果,语法为:return; 在大多数情况下,为事件 ...
- js中return false,return,return true的使用方法及区别
起首return作为返回keyword,他有下面两种返回体式格式 1.返回把握与函数成果 语法为:return 表达式; 语句停止函数履行,返回调用函数,而且把表达式的值作为函数的成果 2.返回把握无 ...
- js中return;、return true、return false;区别
一.返回控制与函数结果, 语法为:return 表达式; 语句结束函数执行,返回调用函数,而且把表达式的值作为函数的结果 二.返回控制, 无函数结果,语法为:return; 在大多数情况下,为事件 ...
随机推荐
- mysql 5.5和5.6版本关于timestamp not null类型字段关于null的处理
Server version: 5.5.33-31.1-log Percona Server (GPL), Release rel31.1, Revision 566 mysql> CREATE ...
- Spring3.x 升级至 Spring4.x 详解
1 升级依赖包 1.1 Maven 项目 1.1.1 更新 spring 依赖版本 打开 pom.xml,把所有 spring3.x 的版本号更新为 spring4.x.建议使用属性配置,形如: &l ...
- man lsof
LSOF(8) LSOF(8) NAME lsof - lis ...
- LeetCode--051--N皇后(java)-star
n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击. 上图为 8 皇后问题的一种解法. 给定一个整数 n,返回所有不同的 n 皇后问题的解决方案. 每一种解 ...
- service pom
<properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> &l ...
- 将HTML转IMAGE
chrome --enable-logging --headless --disable-gpu --screenshot=d:\chrome.jpg --hide-scrollbars --wind ...
- Springboot ,1开启配置与2.扫描包(控制层,service层)二个注解@EnableAutoConfiguration,@ComponentScan 合并成一个注解@SpringBootApplication
//@EnableAutoConfiguration//@ComponentScan(value= {"com.foen.cloud.controller.*","com ...
- (4)Linux(ubuntu)下配置Opencv3.1.0开发环境的详细步骤
Ubuntu下配置opencv3.1.0开发环境 1.最近工作上用到在Ubuntu下基于QT和opencv库开发应用软件(计算机视觉处理方面),特把opencv的配置过程详细记录,以供分享 2.步骤说 ...
- Log4j Threshold、Append
报错ERROR日志单独存放 Threshold属性可以指定日志level Log4j根据日志信息的重要程度,分OFF.FATAL.ERROR.WARN.INFO.DEBUG.ALL 比如我们指定某个a ...
- Vagrant 手册之 Vagrantfile - Vagrant 设置 config.vagrant
原文地址 配置的命名空间:config.vagrant config.vagrant 中的设置修改 Vagrant 自身的行为. 1. 可用设置 config.vagrant.host 设置运行 Va ...