资讯专栏INFORMATION COLUMN

'=='操作符的小动作

PAMPANG / 2511人阅读

摘要:相等操作符会有一个隐形的转换,这个隐形的转化会导致结果很奇怪。

[0] == true; // false
[] == ![];   // true

相等操作符会有一个隐形的转换,这个隐形的转化会导致结果很"奇怪"。下面是隐形转换的基本规则:

其中一个值是boolean值:两个值都转为数字,false转为0,true转为1

其中一个值是字符串,另一个是数字:都转为数字再对比

其中一个是对象,另一个不是对象:调用对象的valueof方法,得到基本类型

其中一个是对象,另一个也是对象:对比对象指向的内存地址是否相等

其中一个是null,另一个是undefined:结果为true

NaN与任何类型(包括本身NaN)都不相等

null,undefined在进行比较的时候,不进行数据类型转换

输出结果分析
[0] == true;

// 最终的对比形式
Number([0]) == Number(true);
[] == ![];

// !的运算级别比 "==" 高,先进行以下转换
[] == false;

// 再转化为最终的对比形式
Number([]) == Number(false);
"奇怪"的结果
undefined == 0;    // false

null == 0;    //false

false == 0;    //true

true == 1;    //true

true == 2;    //false

[] == [];    //false

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

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

相关文章

  • ( 第二篇 )仿写'Vue生态'系列___'模板小故事.'

    摘要:第二篇仿写生态系列模板小故事本次任务承上完成第一篇未完成的热更新配置核心完成模板解析模块的相关编写很多文章对模板的解析阐述的都太浅了本次我们一起来深入讨论一下尽可能多的识别用户的语句启下在结构上为双向绑定等模块的编写打基础最终效果图一模板页 ( 第二篇 )仿写Vue生态系列___模板小故事. 本次任务 承上: 完成第一篇未完成的热更新配置. 核心: 完成模板解析模块的相关编写, ...

    wangtdgoodluck 评论0 收藏0
  • ( 第二篇 )仿写'Vue生态'系列___'模板小故事.'

    摘要:第二篇仿写生态系列模板小故事本次任务承上完成第一篇未完成的热更新配置核心完成模板解析模块的相关编写很多文章对模板的解析阐述的都太浅了本次我们一起来深入讨论一下尽可能多的识别用户的语句启下在结构上为双向绑定等模块的编写打基础最终效果图一模板页 ( 第二篇 )仿写Vue生态系列___模板小故事. 本次任务 承上: 完成第一篇未完成的热更新配置. 核心: 完成模板解析模块的相关编写, ...

    ivydom 评论0 收藏0
  • JS 中为啥 ['1', '7', '11

    摘要:如果我们把非布尔值作为条件呢打开控制台并运行上述代码,会打印说明条件为真值。在中,真值指的是在布尔值上下文中转换后的值为真的值。两个能够建立元素间一一对应的集合称为互相对等集合。 showImg(https://segmentfault.com/img/bVbtSvt?w=720&h=360); 为了保证可读性,本文采用音译而非直译。 Javascript 一直是神奇的语言。 不相信我...

    yuanzhanghu 评论0 收藏0
  • ['1', '2', '3'].map(

    摘要:比如参数表示使用我们通常使用的十进制数值系统。始终指定此参数可以消除阅读该代码时的困惑并且保证转换结果可预测。当未指定基数时,不同的实现会产生不同的结果,通常将值默认为。 showImg(https://segmentfault.com/img/bVbvtHZ?w=536&h=116); 为什么是[1,NaN,NaN]而不是[1,2,3]? 首先看下 Array.map()函数在MD...

    enali 评论0 收藏0

发表评论

0条评论

PAMPANG

|高级讲师

TA的文章

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