js中的等值运算符

js中的相等分为抽象相等和严格相等,他们有什么区别呢。

在说具体算法前,先提下JS数据类型,JS数据类型分为6类:Undefined Null String Number Boolean Object.在这里我们用Type(x)表示x的数据类型

1,抽象相等==
x==y的算法过程如下: 1,Type(x)与Type(y)相同:
如果Type(x)为Undefined或Null,则返回true,即:undefined==undefined; null==null返回true
如果Type(x)为Number,如果x或y为NaN,返回false,即:NaN==NaN为false;x与y数值相等或-0与+0均返回true,否则返回false
如果Type(x)为String,则x和y对应位置的字符完全一样才返回true,否则返回false
如果Type(x)为Boolean,则相同值返回true,否则false
如果Type(x)为Object,则相同引用返回true,否则false,看下面例子:
var a={m:1}
var b={m:1}
a==b
结果为false,因为a,b不是相同引用,再看:
var a={m:1}
b=a
a==b
结果为true,因为他们是引用同一个对象
2,Type(x)为Undefined,Type(y)为Null,返回true,即undefined==null为true
3, Type(x)为String,Type(y)为Number,则将x转换为Number,然后再比较,例:
1==“1”
结果为true,因为将"1"转换为Number后为1
4,Type(x)为Boolean,Type(y)为Number,则将x转换为Number再比较,例
true==1;
false==0;
结果均为true
5,Type(x)为String或Number,Type(y)为Object,则将y转换为基本值,例子:
1==new String("1")
"2"==new Number(2)
结果均为true
6,返回false
2,严格相等===
1,如果 Type(x) 与 Type(y) 的结果不一致,返回 false,即只要类型不一样,则返回false,例子:
1===“1” false
undefined===null false
2,如果Type(x)是Number,如果x或y为NaN,返回false,即:NaN===NaN为false;x与y数值相等或-0与+0均返回true,否则返回false
3,如果 Type(x) 结果为 Undefined,返回 true
如果 Type(x) 结果为 Null,返回 true
如果Type(x)为String,则x和y对应位置的字符完全一样才返回true,否则返回false
如果Type(x)为Boolean,则相同值返回true,否则false
如果Type(x)为Object,则相同引用返回true,否则false 总结:
严格等与抽象等的区别在于,严格等首先要求类型一样,在比较过程中不执行类型转换,抽象等对比较对象的类型会执行转换,再转换为同一类型后再进行值得比较。

js中的等值运算符(抽象相等==与严格相等===的区别)的更多相关文章

  1. JS中的各类运算符

    2020-04-15 JS中的各类运算符 // 假设有如下代码,那么a(10)的返回结果是?( ) function a(a) { a^=(1<<4)-1; return a; } // ...

  2. js中的new操作符与Object.create()的作用与区别

    js中的new操作符与Object.create()的作用与区别 https://blog.csdn.net/mht1829/article/details/76785231 2017年08月06日 ...

  3. js中的instanceof运算符

    概述 instanceof运算符用来判断一个构造函数的prototype属性所指向的对象是否存在另外一个要检测对象的原型链上 语法 obj instanceof Object;//true 实例obj ...

  4. js中,全局变量与直接添加在window属性的区别

    在js中定义的全局变量是挂在window下的,而window的属性也一样,那么这两者有什么区别呢? 其实这两者还是有小小的区别的,全局变量是不能通过delete操作符删除的,而直接定义在window上 ...

  5. js中slice(),splice(),split(),substring(),substr()的使用方法和区别

    1.slice(): Array和String对象都有 在Array中  slice(i,[j]) i为开始截取的索引值,负数代表从末尾算起的索引值,-1为倒数第一个元素j为结束的索引值,缺省时则获取 ...

  6. JS中绑定事件顺序(事件冒泡与事件捕获区别)

    在JS中,绑定的事件默认的执行时间是在冒泡阶段执行,而非在捕获阶段(重要),这也是为什么当父类和子类都绑定了某个事件,会先调用子类绑定的事件,后调用父类的事件.直接看下面实例 <!Doctype ...

  7. js中return;、return true、return false的区别

    一.返回控制与函数结果, 语法为:return 表达式; 语句结束函数执行,返回调用函数,而且把表达式的值作为函数的结果  二.返回控制, 无函数结果,语法为:return;  在大多数情况下,为事件 ...

  8. JS中的加号+运算符详解

    加号+运算符 在 JavaScript 中,加法的规则其实很简单,只有两种情况: 把数字和数字相加 把字符串和字符串相加 所有其他类型的值都会被自动转换成这两种类型的值. 为了能够弄明白这种隐式转换是 ...

  9. js中的位运算符 ,按位操作符

    按位操作符(Bitwise operators) 将其操作数(operands)当作32位的比特序列(由0和1组成),而不是十进制.十六进制或八进制数值.例如,十进制数9,用二进制表示则为1001.按 ...

随机推荐

  1. 轻量级前端MVVM框架avalon - 执行流程1

    基本上确定了avalon的几个重要元素的关系: M,即model,一个普通的JS对象,可能是后台传过来的,也可能是直接从VM中拿到,即VM.$json.有关的这个$json的名字还在商讨 V,即Vie ...

  2. 前端MVVM框架avalon揭秘 - HTML编译器

    MVVM试图更加清晰的讲用户界面(UI)开发从应用程序的业务逻辑与行为中心分离,因为,很多这样的模式的实现都需要利用声明式数据绑定来实现讲View(视图)工作从其他层分离 所以出现了一大堆自定义的声明 ...

  3. BOOST Voronoi Visualizer

    BOOST Voronoi Visualizer eryar@163.com Abstract. The Voronoi extension of the Boost.Polygon library ...

  4. 通过3个Hello World应用来了解ASP.NET 5应用是如何运行的(2)

    对于上面创建的这个Hello World应用来说,程序入口点由应用自身来提供,所以应用本身具有自我执行的能力.从应用托管(Host)的角度来讲,这样的应用同时负责对自身的托管.将应用与托管环境独立起来 ...

  5. SubSonic3.0使用例子

    前段时间开发的框架使用了SubSonic2.2以后,觉得开发效率提高了不少,后期维护起来也非常方便,不由的喜欢上了SubSonic.中间有想过升级到更高版本,但度娘一下就放弃了,只有极少的中文版说明, ...

  6. 最大值最小化(DP)

    题目来源:网易有道2013年校园招聘面试一面试题 题目描述: 在印刷术发明之前,复制一本书是一个很困难的工作,工作量很大,而且需要大家的积极配合来抄写一本书,团队合作能力很重要.当时都是通过招募抄写员 ...

  7. 深入理解 OWIN 中的 Host 和 Server

    The Open Web Interface for .NET (OWIN),注意单词为大写,之前好像都写成了 Owin,但用于项目的时候,可以写成:Microsoft.Owin.*. OWIN 体系 ...

  8. Android 学习Activity(1)activity和intent

    工具是:JDK环境配置+SDK+ADT工具 一.Activity  主要作用: 1.用户与应用程序的接口 2.控件的容器 二.创建Activity要点:(在src中的目录下包里) 1.一个Activi ...

  9. (十三)WebGIS中工具栏的设计之命令模式

    文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/. 1.背景 从这一章节开始我们将正式进入WebGIS的工具栏中相关功能的 ...

  10. Android开发中的menu菜单

    复写onCreateOptionsMenu方法,当点击menu菜单时,调用该方法. @Override public boolean onCreateOptionsMenu(Menu menu) { ...