前言: 在js中我们经常会用到==和===等号,一起来研究一下两者之间的区别,在Javascrpit中判断相等关系有双等号(==)和三等号(===)两种,其中双等号(==)是值相等,而三等号(===)是严格相等(值及类型是否完全相等;
1.在接下来的比较之前,先了解一下什么是简单数据类型,在Es6之前,简单的数据类型有,Number(数字),String(字符串),Boolean(布尔),null(空),underfined(未定义),
复杂的数据类型有Arway(数组),{}对象,function(函数)
2.接下来,我们要明确的一点是,==之间会进行强制转换,两个等号,(===)在进行比较的时候
首先要先判断两边之间的数据类型是否相等,在判断值是否相等,两者同时满足。
总共有3种比较的方式
3.简单数据类型之间的转化方式
两边都是简单类型,类型不同,则先转换为数字比较(其中Boolean只有两个值:true==1,false==0,null与underfined相等,字符串数字等于数字值,空字符串 “”==0)
alert('11' == 11) //true
alert('11' === 11) //false
解析: 第一个式子在进行比较的时候,左边是字符串,右边是数字类型,在进行比较的时候,因为是==会进行强制的转换,左边的字符串型会被转换成数字类型进行比较;
console.log(false == 0);//true
console.log(false === 0); //false
解析: 左边为布尔型,右边为数字型, 又因为是(==),在比较的时候会进行类型的转换,把false转换为数字0进行比较,所以打印出的结果是true,第二个式子,两边的类型不一样所以为false;
console.log(undefined == null); //true
console.log(null == null); //true
console.log(underfined == undefined); //true
console.log(null == 0); //false
console.log(undefined == 0); //false
可以看出:undefined一般是声明后未赋值的变量的默认值,表示"不知道是什么值,未定义的";null表示"空值",表示是"无值的"。
undefind和null在进行 == 比较时,会进行强制类型转换,认为两者的值是相等的,都表示"值的空缺",并且各自与自身也相等。除此之外,null和undefined与任何值都不相等。
console.log('' == 0); //true
解析:'' 会被隐式转换成0进行比较。
4.复杂数据类型之间进行比较
复杂数据类型比较的是地址
var d=new Date();
var a=new Array()
a==d false
a===d false
解析:
当比较的两个对象是Object类型的时候,==和===的效果是一样的,因为两个不同对象之间的值是无法直接进行比较的,也是无法进行转换的,So,两个比较全为false;
5.复杂类型和简单类型进行比较
复杂数据类型和和简单的数据类型比较,会先将复杂的数据类型转化为简单的数据类型,然后在进行比较;
var arr = [1]
var v = 1;
console.log(arr == v); //true
[] ==[] false