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; 在大多数情况下,为事件 ...
随机推荐
- AT3576 E Popping Balls——计数思路
题目:https://code-festival-2017-qualb.contest.atcoder.jp/tasks/code_festival_2017_qualb_e 题解:https://w ...
- SSL异常javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure
jdk 7 http://www.oracle.com/technetwork/java/javase/downloads/jce-7-download-432124.html jdk 8 http: ...
- (转)用Flink取代Spark Streaming!知乎实时数仓架构演进
转:https://mp.weixin.qq.com/s/e8lsGyl8oVtfg6HhXyIe4A AI 前线导读:“数据智能” (Data Intelligence) 有一个必须且基础的环节,就 ...
- 台哥原创:java 俄罗斯方块源码
大四的时候,用java开发,耗时一周 界面参照当时用的联想手机里的俄罗斯方块 这里的级别,标识难度,1是初级,方块下降速度很慢,5是最高级,下降速度最快 得分:每消除一行,会给10分,同时消除 ...
- Oracle创建dblink进行跨数据库操作
创建dblink:create public database link link_to_test connect to 用户名 IDENTIFIED by "密码大写" usin ...
- linux-批量修改目录下后缀shell
#!/bin/bashcd /optrename .sh .shell *.shecho "后缀修改成功"
- day30—使用Flexbox和CSS Grid实现高效布局实践
转行学开发,代码100天——2018-04-15 (今天是代码开发的第30天,但是代码记录有些滞后,尽快补上.日后要严格执行,避免学习进度和内容相对滞后.) 今天,记录“前端大全”里分享的一篇关于利用 ...
- day06—JavaScript之闭包
转行学开发,代码100天——2018-03-22 第一次听说“闭包”这个词,还是在2015年某个深夜在听一节腾讯课堂的公开课上,当时老师讲什么已经没有清晰的记忆了,只知道是一次web的开发课程. 过了 ...
- delphi 牛逼 了 app (已在软件界掀起波澜)10分钟10行代码做出让人惊叹的程序
(已在软件界掀起波澜)10分钟10行代码做出让人惊叹的程序 http://v.qq.com/x/page/m0328h73bs7.html?ptag=bbs_csdn_net
- vue-安装及新建一个项目
1.首先我们需要安装node.js,下载地址是:https://nodejs.org/en/ 之后是node.js的正常安装步骤: 接着打开window+R输入cmd回车进入命令行模块 2.确认nod ...