前言:

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

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

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

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

'' == ''           // false
== '' // true
== '' // true false == 'false' // false
false == '' // true false == undefined // false
false == null // false
null == undefined // true ' \t\r\n ' == // 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中的 == 与 === 、永远不要使用 ==的更多相关文章

  1. 关于js中this关键字的补充

    前面: 前面虽然综合了网络上不少大牛的心得,但感觉还是意犹未尽,为了彻底搞清楚js中this的相关知识,决定再写一篇.个人觉得,在技术上,除非钻到细枝末节,否则很难达至非常高的水平. 补充1: 无法重 ...

  2. js中this关键字测试集锦

    参考:阮一峰<javascript的this用法>及<JS中this关键字详解> this是Javascript语言的一个关键字它代表函数运行时,自动生成的一个内部对象,只能在 ...

  3. 浅解析js中的对象

    浅解析js中的对象 原文网址:http://www.cnblogs.com/foodoir/p/5971686.html,转载请注明出处. 前面的话: 说到对象,我首先想到的是每到过年过节见长辈的时候 ...

  4. 彻底理解js中this的指向,不必硬背。

    首先必须要说的是,this的指向在函数定义的时候是确定不了的,只有函数执行的时候才能确定this到底指向谁,实际上this的最终指向的是那个调用它的对象(这句话有些问题,后面会解释为什么会有问题,虽然 ...

  5. 了解学习JS中this的指向

    [转] 首先必须要说的是,this的指向在函数定义的时候是确定不了的,只有函数执行的时候才能确定this到底指向谁,实际上this的最终指向的是那个调用它的对象(这句话有些问题,后面会解释为什么会有问 ...

  6. JS中this的值到底为何?

    之前很久的时间,因为研究不深,对于this的值一直模模糊糊,不是很清楚,最近有空做了一些研究,终于彻底弄明白了this到底为何物. 首先, 先抛出一个定论:”在Javascript中,this关键字永 ...

  7. 深入探究js中无所不在的this

    黄金守则: this对象是在运行时基于函数的执行环境绑定的:在全局函数中,this等于window而当函数被作为某个对象的方法调用时, this等于那个对象. 下面是一些相关实践: --------- ...

  8. 理解js中this的指向

         学习自原文  http://www.cnblogs.com/pssp/p/5216085.html后的一点小结(原文作者总结的很棒^_^)! 关于js中this的指向,在函数定义的时候还无法 ...

  9. 聊一下JS中的作用域scope和闭包closure

    聊一下JS中的作用域scope和闭包closure scope和closure是javascript中两个非常关键的概念,前者JS用多了还比较好理解,closure就不一样了.我就被这个概念困扰了很久 ...

随机推荐

  1. Linux ps 进程状态码

    D            不可中断睡眠(通常进程在进行I/O) R            运行中或者可运行状态(在运行队列中) S            可中断睡眠(等待event,进程idle中) ...

  2. ACM 韩信点兵 、n的另一种阶乘、6174的问题

    3.6174问题 描述 假设你有一个各位数字互不相同的四位数,把所有的数字从大到小排序后得到a,从小到大后得到b,然后用a-b替换原来这个数,并且继续操作.例如,从1234出发,依次可以得到4321- ...

  3. SQL compute by 的使用 主要是针对与 GROUP BY 的区别

    GROUP BY子句有个缺点,就是返回的结果集中只有合计数据,而没有原始的详细记录.如果想在SQL SERVER中完成这项工作,可以使用COMPUTE BY子句.COMPTE生成合计作为附加的汇总列出 ...

  4. Linux或者window装svn

    Centos7搭建SVN Server手记 安装svn和依赖模块 yum install httpd httpd-devel subversion mod_dav_svn mod_auth_mysql ...

  5. Transaction And Lock--两种方式实现可重复读

    一些需求要求两次查询数据之间不允许数据被修改,即可重复读取 可重复读REPEATABLE READ与串行化SERIALIZABLE的区别在于串行化要求满足该查询的数据不被修改且无新满足该查询条件的数据 ...

  6. WPF 之 UI 异步交互

    System.Windows.Application.Current.Dispatcher.BeginInvoke(new Action(()=> { //··················· ...

  7. centos 7 安装solr7.3.0 配置mysql

    1.下载solr :wget http://archive.apache.org/dist/lucene/solr/7.3.0/solr-7.3.0.tgz   或者去官网自己下:http://arc ...

  8. pageadminCMS.Net Framework的安装教程

    很多用户第一次安装PageAdmin建站系统时候会出现这个错误,主要原因:Net Framework是微软的一个系统组件,基本所有windows平台上开发的产品都需要安装Net Framework,除 ...

  9. 【QTP专题-优化】VBS脚本启动QTP并运行测试

    使用vbs脚本启动QTP并运行测试,startQTP.vbs '******************************************************************** ...

  10. 【07】循序渐进学 docker:数据持久化

    写在前面的话 学到这里相信有心的朋友都发现问题了,我们每次都会去删掉容器,在创建新的容器.那数据怎么办?岂不删库跑路了? 就算不是数据库,假设公司有日志保留的需求,那每一次发布岂不日志都被干掉了? D ...