js中的 == 与 === 永远不要使用 ==

Posted Wayne Zhu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了js中的 == 与 === 永远不要使用 ==相关的知识,希望对你有一定的参考价值。

前言:

   很久没有复习基础了,所以导致做项目的时候被坑,咳咳,基础还是很重要的。 

  === 是没有强制类型转换的,和其他大部分语言的 == 是一样的。而js中 == 是有类型转换的,这也是js饱受诟病的原因之一。 那么 == 的转换规则是什么呢?

  比如说 "true" == true 就是错的, Boolean("false") == false 也是错的。

  也就是说,对于 == 是有一定的类型转化的。

\'\' == \'0\'           // false
0 == \'\'             // true
0 == \'0\'            // true

false == \'false\'    // false
false == \'0\'        // true

false == undefined  // false
false == null       // false
null == undefined   // true

\' \\t\\r\\n \' == 0     // true

  比如,这里的一个是string,一个是布尔值,就都会向数字进行转化,那么"true"转化为了 NaN, 而 true 转化为了0, 自然就是不相等了。 而Boolean("false")为true,所以也是不相等的。

  

 

基础:

  js中提供了两组操作符,相等和不相等 --- 先转换再比较, 全等和不全等 --- 仅比较而不转换。 

  1. 相等和不相等

  相等即 == ,如果相等,则返回true。 而不相等就是 != ,如果不相等,则返回true。 这两个操作符都会先转换操作数,然后再比较。转换的基本准则如下:

  • 如果有一个操作数是布尔值,则在比较之前先将其转换为数值 - false转换为0,true转换为1。
  • 如果一个操作数是字符串,另一个操作数是数值,在比较相等性之前先将字符串转为数值。
  • 如果一个操作数是对象,另一个不是,那么调用对象的valueOf()方法,用得到的基本类型值按照前面的规则进行比较。    

 

  在比较时,还需要遵守下面的重要规则:

  • null 和 undefined是相等的。
  • 要比较相等性之前,不能将null和undefined转换为其他值。 
  • 如果有一个操作数是 NaN, 则相等操作符返回false, 而不相等操作符返回true。 重要提示: 即使两个操作符都是NaN, 相等操作符也返回false, 因为按照规则,NaN不等于NaN。
  • 如果两个操作数都是对象,则比较他们是不是同一个对象,如果两个操作数都指向同一个对象,则相等操作符返回true;否则,返回false。 

 

  而=== 和!== 不会进行强制类型转换。 

 

 记住: null == undefined 会返回true, 因为他们是类似的值; 但是null === undefined 会返回 false, 因为他们是不同类型的值。

 

 

更多: 

  我们从贺师俊的回答中也可以看到我们是不提倡使用 == 的。永远不要使用 ==。

  

以上是关于js中的 == 与 === 永远不要使用 ==的主要内容,如果未能解决你的问题,请参考以下文章

PySnooper:永远不要使用print进行调试

永远不要删除 jQuery 中的活动类

真正赚大钱的逻辑,永远不要与趋势为敌!(深度好文)

JavaScript性能优化1——内存管理(JS垃圾回收机制引用计数标记清除标记整理V8分代回收Performance使用)

《永远不要在 Linux 执行的 10 个最危险的命令》

在laravel中验证从表单到控制器的数据?