JS重温基础

【重温基础】18.相等性判断

2019-01-22  本文已影响7人  pingan8787

本文是 重温基础 系列文章的第十八篇。
今日感受:优化自己的代码,也是很愉快的事情。

系列目录:

本章节复习的是JS中的关于严格相等和非严格相等的一些知识。

前置知识:
判断两个变量的值是否相等,是编程中非常重要的一个操作。这里我们心里面先有两组对照,思考下:

1.介绍

在我们比较字符串、数值和布尔值的相等性,是比较简单的,但是到了比较对象的时候,问题就比较复杂。
早期的时候ECMAScript规范中,在判断相等和不相等时,会先将对象转换成相似的类型,再执行比较。后面有人质疑其合理性,最后ECMAScript提出解决方法:提供两组操作符:

另外还有一类ES6新增的方法:

2.相等和不相等

JavaScript中用相等操作符使用==进行比较,若两个操作数相等,则返回true,否则返回false。反之,不相等操作符使用!=
这两个操作符都会先转换操作数类型,再进行比较

通常在转换不同数据类型时,相等和不相等会遵循以下规则:

两个操作符进行比较时会遵循下面规则:

下面列出一些特殊情况的比较 :

表达式
null == undefined true
"NaN" == NaN false
9 == NaN false
NaN == NaN false
NaN != NaN true
false == 0 true
true == 1 true
true == 2 false
undefined == 0 false
null == 0 false xiao
"9" == 9 true

3.全等和不全等

除了比较前不转换操作数歪,全等和不全等与相等和不相等并无区别,但使用的是===,只有当不转换的情况下两个操作数相同,才会返回true

"99" == 99 ;  // true   因为先转换类型 number 和 number
"99" === 99 ; // false  因为不转换类型 string 和 number

不全等操作符就相对应的使用!==

"99" != 99 ;  // false   因为先转换类型 number 和 number
"99" !== 99 ; // true    因为不转换类型 string 和 number

特殊的:

null == undefined;   // true  类似的值
null === undefined;  // false 类型不同

由于相等和不相等操作符存在类型转换问题,因此为了保持代码中数据类型的完整性,我们推荐使用去哪等和不全等操作符。

4.同值相等(Object.is)

Object.is(value1, value2);,传入两个需要对比的值。
Object.is() 判断两个值是否相同,并且不会对参数进行类型转换。如果下列任何一项成立,则两个值相同:

Object.is('leo', 'leo');     // true
Object.is(window, window);   // true

Object.is('leo', 'pingan');     // false
Object.is([], []);           // false

var leo = { a: 1 };
Object.is(leo, leo);       // true

Object.is(null, null);       // true

// 特例
Object.is(0, -0);            // false
Object.is(-0, -0);           // true
Object.is(NaN, 0/0);         // true

另外还有特殊的:

5.对比图

相等操作符对于不同类型的值,进行的比较如下图所示(来源 MDN):

MDN 相等1

注意:

MDN 相等2 MDN 相等3 MDN 相等4

参考文章:

  1. MDN JavaScript 中的相等性判断
  2. JavaScript高级程序设计

本部分内容到这结束

Author 王平安
E-mail pingan8787@qq.com
博 客 www.pingan8787.com
微 信 pingan8787
每日文章推荐 https://github.com/pingan8787/Leo_Reading/issues
JS小册 js.pingan8787.com
微信公众号【前端自习课】
上一篇下一篇

猜你喜欢

热点阅读