资讯专栏INFORMATION COLUMN

js双等号探索(三): [] == false为True,而!![] == false为False

DrizzleX / 2377人阅读

摘要:所以为为第二步转成根据文档比较操作符如果一个对象与数字或字符串相比较,会尝试返回对象的默认值。尝试将数字字面量转换为数字类型的值。

[] == false; //为True
!![] == false; //为False
一、[] == false为True 第一步 转成[] == 0

根据 MDN Web 文档-比较操作符:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/Comparison_Operators

如果其中一个操作数为布尔类型,那么布尔操作数如果为true,那么会转换为1,如果为false,会转换为整数0,即0。
所以![]false0.
[] == 0
第二步 转成"" == 0

根据 MDN Web 文档-比较操作符:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/Comparison_Operators

如果一个对象与数字或字符串相比较,JavaScript会尝试返回对象的默认值。操作符会尝试通过方法valueOf和toString将对象转换为其原始值(一个字符串或数字类型的值)。
所以[].valueOf().toString()""
"" == 0
第三步 转成0 == 0

根据 MDN Web 文档-比较操作符:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/Comparison_Operators

当比较数字和字符串时,字符串会转换成数字值。 JavaScript 尝试将数字字面量转换为数字类型的值。
Number("")0
0 == 0

最后0==0True,所以[] == falseTure

二、!![] == false为False 第一步 先运行!![]

根据 MDN Web 文档-运算符优先级:[https://developer.mozilla.org...
](https://developer.mozilla.org...

!的优先级为16 ,==的优先级为10!的优先级更高,所以先运行!![]

!![]
第二步 先运行!false

根据 《Javascript高级程序设计》这本书第44页中逻辑非的说明:

如果操作数是一个对象,返回false

所以运行!false,为True

!false //为True

最后true == falseFalse,所以!![] == falseFalse

[] == falseTrue!![] == falseFalse

其他链接

https://raoenhui.github.io/js/2018/09/22/compare1/

https://raoenhui.github.io/js/2018/09/23/compare2/

https://raoenhui.github.io/js/2018/09/28/compare3/

Happy coding ..

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/98062.html

相关文章

  • js等号探索(一): [] == ![]Ture ?

    摘要:所以为第四步转成根据文档比较操作符当比较数字和字符串时,字符串会转换成数字值。尝试将数字字面量转换为数字类型的值。最后位所以为其他链接 [] == ![] //为True 第一步 转成[] == false 根据 MDN Web 文档-运算符优先级:[https://developer.mozilla.org...](https://developer.mozilla.org...s...

    CollinPeng 评论0 收藏0
  • js等号探索(二): a==3&&a==4 true

    摘要:前言为是可以实现的。在中,非对象参数将被视为一个冻结的普通对象,因此会返回。注意所以一定要是对象,如果是非对象的其他基本类型如,,被视为冻结对象,不能重写,则不起效果。第四步为这时已经为,运行返回值也为。最后为如上所示为,为,则为其他链接 前言 a==3 && a==4为True是可以实现的。具体代码如下所示: let a=[]; var x=3; a.valueOf=()=>{ ...

    cheng10 评论0 收藏0
  • 【前端面试】变量和类型计算

    摘要:题目使用能得到哪些类型和的选择中有哪些内置函数变量按存储方式分为哪些类型,并描述其特点如何理解知识点值类型和引用类型值类型引用类型对象,数组,函数值类型直接把值存储在堆中,把赋值给在内存中是又给开辟了一块新的空间,存储了同样的值。 1.题目 1.JS使用typeof能得到哪些类型 === 和 == 的选择 JS中有哪些内置函数 JS变量按存储方式分为哪些类型,并描述其特点 如何理解J...

    DoINsiSt 评论0 收藏0
  • javascript变量运算符详解

    摘要:代码示例等号检查,类型转换后返回全等检查,由于时类型,时类型,类型不同,返回关系运算符关系运算符执行的是比较运算,通常用于判断两个变量哪个大哪个小关系运算符都返回一个布尔值。逻辑或运输符用双竖线表示。 1.运算符 JavaScript中常见的运算符包含:赋值运算符、算数运算符、等性运算符、关系运算符、条件运算符、布尔运算符、逻辑运算符…… 1.赋值运算符 = 赋值运算符=,用于给某个变...

    Sourcelink 评论0 收藏0
  • Javascripit类型转换比较那点事儿,等号(==)

    摘要:同理,若为,返回的结果若为或者,且为,返回的结果。同理,若为或者,且为,返回的结果是对象转换基本类型的方法。看个例子根据上述规则来解析为,上式为第条上式为第条上式为,上式为第条上式为 前不久因为一个项目设计的问题,烦心了好几天,为了不留坑拥抱强类型语言特点,还是选择了===作为数据判断是否相等,对于==今天来探究一下猫腻(弱类型的JavaScript的坑真的太多了,typescript...

    Steve_Wang_ 评论0 收藏0

发表评论

0条评论

DrizzleX

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<