前言:

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

  === 是没有强制类型转换的,和其他大部分语言的 == 是一样的。而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. Alpha冲刺(五)

    Information: 队名:彳艮彳亍团队 组长博客:戳我进入 作业博客:班级博客本次作业的链接 Details: 组员1 柯奇豪 过去两天完成了哪些任务 基于ssm框架的前后端交互测试,结合微信小 ...

  2. NIOS II SOPC系统自定义IP常见知识点总结

    封装IP1.将写好的Verilog代码添加在Quartus工程中,IP目录下,(如果没有,自己建一个)2.打开Qsys工具,选择New Component3.name和Display name输入合理 ...

  3. MongoDB整理笔记の移除Shard Server

    有些时候有于硬件资源有限,所以我们不得不进行一些回收工作,下面我们就要将刚刚启用的Shard Server 回收,系统首先会将在这个即将被移除的Shard Server 上的数据先平均分配到其它的Sh ...

  4. sampling method

    sampling method 背景 在贝叶斯框架下,利用后验分布对参数进行估计,也即 其中 (1)是参数的先验分布. (2)是似然分布,数据集的生成联合概率 (3)是参数的后验分布. 通常分布很复杂 ...

  5. win10与子系统Ubuntu 相关配置

    系统间 文件访问: 1. 在win10环境下访问Ubuntu文件系统的home目录:C:\Users\xxx\AppData\Local\Packages\CanonicalGroupLimited. ...

  6. nginx uwsgi flask相关配置

    一.安装Nginx 在 /home/download下下载压缩包 wget https://nginx.org/download/nginx-1.12.2.tar.gz 解压缩 tar zxvf ng ...

  7. 虚拟化 - Docker

    Docker Desktop (for windows and mac) Docker Desktop 注意 安装时有可能卡主,可以关掉重新装 重启启动时,可能报错"VIRTUALIZATI ...

  8. C# Log4.Net日志组件的应用系列(二)

    引言 Log4Net应该可以说是.NET中最流行的开源日志组件了.在各种项目框架中可以说是必不可少的组成部分.个人认为Log4Net有下面几个优点: 1. 使用灵活,它可以将日志分不同的等级,以不同的 ...

  9. orcal 锁表

    --查询Oracle正在执行的sql语句及执行该语句的用户 SELECT b.sid oracleID, b.username 登录Oracle用户名, b.serial#, spid 操作系统ID, ...

  10. Ubuntu16.04 JAVA配置!

    下面是转发的文章,写得不错,不过有些地方需要注意: 1,以root身份登入,安装和配置JDK,这样JDK是全局的,其他用户也可以使用! 2,下面文章中的JDK版本应该比我们目前能够下载的要旧,我们把下 ...