资讯专栏INFORMATION COLUMN

为什么[]是false而 !![] 是true

hlcfan / 1282人阅读

摘要:原文链接链接描述总结一下相当于,是对象的默认值。中,若是,则先再其他情况,则先再所以对于来说,是先再,得到的结果是,所以是。而对于来说,根据规范相当于,而为,所以是。

原文链接: 链接描述

总结一下:

hint:相当于default,是对象的默认值。

OrdinaryToPrimitive(input,hint)中,若hint是string,则先toStringvalueOf;其他情况,则先valueOftoString

所以对于[]来说,是先valueOftoString,得到的结果是"",所以[]==false是true。

而对于!![]来说,根据规范相当于!!(toBoolean([])),而toBoolean([])为true,所以!![]是true。

下面看一些例子哦~~

[1] + [2] - [3] === 9;  // true ,相当于“12” - 3 ,先toString,然后"-"会调用toNumber

[1] + [2] === "12";  // true

[1] +- [2] === "1-2";  // true,这要使用到Symbol.toPrimitive,这儿我自己还没太搞明白,后续再补上

1 - [2] === -1; // true

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

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

相关文章

  • JS中鲜为人知的问题: [] == ![]结果为true {} == !{}却为false

    摘要:在比较字符串数值和布尔值的相等性时,问题还比较简单。但在涉及到对象的比较时,问题就变得复杂了。和是相等的要比较相等性之前,不能将和转换成其他任何值如果有一个操作数是,则相等操作符返回,而不相等操作符返回。 console.log( [] == ![] ) // true console.log( {} == !{} ) // false 在比较字符串、数值和布尔值的相等性时,问题还...

    csRyan 评论0 收藏0
  • 你真的理解==和===的区别吗?

    摘要:上面的理解是错的,和返回就可以推翻。解释不清楚和是相等的。和的规则类似,唯一少了转换的一步。三高级阶段参考规范真正理解真的如高设所说的那样吗其实不然。来分析一个经典的例子,看完彻底理解的强制转换。 showImg(https://segmentfault.com/img/remote/1460000011658462?w=512&h=321); 用中文怎么叫合适?相等?全等?其实并不合...

    TwIStOy 评论0 收藏0
  • 透彻研究Javascript类型转换

    摘要:注释空数组空对象转换为布尔型也是坑。系统会在自动类型转换的时候调用他们,所以我们通常不需要手动调用他们。严格相等不存在类型转换,对于类型不同的两个值直接返回。 Javascript 中有5种基本类型(不包括 symbol),以及对象类型,他们在不同的运算中会被系统转化为不同是类型,当然我们也可以手动转化其类型。 Javascript 类型转换中的坑极多,就连 Douglas Crock...

    dailybird 评论0 收藏0
  • js的类型转化三两事儿

    摘要:即在这个隐式强制类型转换中,即不会等于也不会等于。按照正常人类的脑回路,应该是将先转换为布尔值,然后再将两个布尔值对比。为什么和就可以避开操作符的坑呢它们进行强制类型转换时的转换规则又是怎样的。 在js中,类型转换是一个被非常多人诟病的地方。新手看了会发矇,老手看了会头疼。 类型转换,又成为强制类型转换,主要区分为显式强制类型转换和隐式强制类型转换 按我理解,类型转换的意思就很明显,就...

    vpants 评论0 收藏0

发表评论

0条评论

hlcfan

|高级讲师

TA的文章

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