JavaScript中比较运算符== 和===

  JavaScript允许对任意数据类型做比较,如果操作数相等则返回true,否则返回false。   

  1."==="运算符也称为严格相等运算符,它用来检测两个操作数是否严格相等。该运算符首先计算其操作数的值,然后比较这两个值,比较过程中并不会首先对操作符进行任何类型转换。

  2."=="运算符称为相等运算符,用来检测两个操作数是否相等,这里“相等”的定义非常宽松,可以允许进行类型转换。相等运算符"=="和"==="运算符类似,但相等运算符的比较并不严格。如果两个操作数不是同一类型,那么相等运算符会尝试对操作数进行一些类型转换,然后进行比较。例如:

  2.1 如果一个值是null,另一个是undefined,则他们相等。

  2.2 如果一个值是数字,另一个是字符串,比较时现将字符串转换为数字,然后使用转换后的值比较。

  2. 3 如果其中一个值是true,则将其转换为1再进行比较。

  因为在使用过程中"=="会出现类型转换,所以为避免在使用"=="过程中出现意想不到的类型转换而影响比较结果,建议除特殊情况外全部用"==="。

  

  另一个例外是NaN这个特殊的Number与所有其他值都不相等,包括它自己:

    NaN === NaN; // false

  唯一能判断NaN的方法是通过isNaN()函数:

    isNaN(NaN); // true

  最后要注意浮点数的相等比较:

    1 / 3 === (1 - 2 / 3); // false

  这不是JavaScript的设计缺陷。浮点数在运算过程中会产生误差,因为计算机无法精确表示无限循环小数。要比较两个浮点数是否相等,只能计算它们之差的绝对值,看是否小于某个阈值:

  Math.abs(1 / 3 - (1 - 2 / 3)) < 0.0000001; // true

posted @ 2017-06-22 16:55  飞奔吧小土豆  阅读(395)  评论(0编辑  收藏  举报