博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
详解Object.is()与比较操作符===、==
阅读量:6854 次
发布时间:2019-06-26

本文共 1151 字,大约阅读时间需要 3 分钟。

hot3.png

== (或者 !=) 操作在需要的情况下自动进行了类型转换。=== (或 !==)操作不会执行任何转换。===在比较值和类型时,可以说比==更快。

[10] ==  10      // 为 true[10] === 10      // 为 false'10' ==  10      // 为 true'10' === 10      // 为 false []  ==  0       // 为 true []  === 0       // 为 false ''  ==  false   // 为 true 但 true == "a" 为false ''  === false   // 为 false

而在ES6中,Object.is()类似于===,但在三等号判等的基础上特别处理了 NaN 、-0 和 +0 ,保证 -0 和 +0 不再相同,但 Object.is(NaN, NaN) 会返回 true。

下面这些情况Object.is()会认为两个值是相同的:

两个值都是 undefined两个值都是 null两个值都是 true 或者都是 false两个值是由相同个数的字符按照相同的顺序组成的字符串两个值指向同一个对象两个值都是数字并且都是正零 +0都是负零 -0都是 NaN都是除零和 NaN 外的其它同一个数字

这种相等性判断逻辑和传统的==运算符所用的不同,== 运算符会对它两边的操作数做隐式的类型转换(如果它们是不同类型的值的话),然后才进行相等性比较,(所以才会有类似 "" == false 为 true 的现象),但 Object.is 不会做这种类型转换。

而且,即便严格相等运算符 === 不会对操作数进行类型转换,但它不能区分两个不同的数字 -0 和 +0,还会把两个 NaN 看成是不相等的。

Object.is('foo', 'foo');     // trueObject.is(window, window);   // trueObject.is('foo', 'bar');     // falseObject.is([], []);           // falsevar test = { a: 1 };Object.is(test, test);       // trueObject.is(null, null);       // true// 两个特例,=== 也没法判断的情况Object.is(0, -0);            // falseObject.is(NaN, 0/0);         // true

转载于:https://my.oschina.net/cllgeek/blog/1584758

你可能感兴趣的文章
深入剖析Vue源码 - 选项合并(下)
查看>>
vue父、子、孙组件间数据传递、事件传递
查看>>
React 源码解析之总览
查看>>
Gulp
查看>>
Java比特币开发教程: 创建比特币钱包
查看>>
如何阅读jdk源码?
查看>>
删除文件,du观察空间已经删除,但df观察空间仍被占用的解决方法
查看>>
slf4j+log4j2配置注意事项
查看>>
eclipse从数据库逆向生成Hibernate实体类
查看>>
SiteMesh
查看>>
python 操作xls
查看>>
PhpStorm 连接mysql 方法
查看>>
数据库操作SQL语句大全
查看>>
Spring Config Server
查看>>
使用Freemarker生成Word
查看>>
目标规划---解目标规划的单纯形法
查看>>
三星note手机上html5画面模糊解决方案
查看>>
nginx无缝升级
查看>>
centos7 安卓mysql服务 :允许远程登录,修改密码,查看并修改编码
查看>>
[UE4]采集360全景
查看>>