您的位置:首页 > 其它

不同类型间使用相等操作符"=="的比较结果

2018-03-08 16:37 281 查看
在不同类型操作数之间,使用”==”来比较时,常常显得混乱和复杂。本文将试图对此进行一番分析和总结。

一、有一个操作数是布尔值

我们在浏览器中输入以下示例:

false==0;//true
false==1;//false
false==2;//false
true==0;//false
true==1;//true
true==2;//false
true==NaN;//false
false==NaN;//false
true==Infinity;//false
false==Infinity;//false


我们看到false和0、true和1是相等的,这是因为:

有一个操作数是布尔值时,另一个是数字时,会先将布尔值转换为数值,false转换为0,true转换为1。

假使我们另一个操作数不是数字而是null、undefined呢?

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


可以发现:true、false和null/undefined都不相等。

假设另一个是字符串:

false=='a';//false
true=='a';//false
false=='';//true
true=='';//false
true=='0';//false
false=='0';//true


布尔值和字符串的比较,仅有false和空字符串、false和’0’相等。

再看另一个操作数是对象、数组、正则、Date的情况:

false=={};//false
true=={};//false
false=={a:1};//false
true=={a:1};//false

false==[];//true
true==[];//false
false==[1,2];//false
true==[1,2];//false

false==new Date();//false
true==new Date();//false

false==new RegExp();//false
true==new RegExp();//false
false==/\.jpg$/;//false
true==/\.jpg$/;//false
true==function(){};//false
false==function(){};//false


我们可以发现:

在泛对象类型,即将数组、正则、Date、函数也看作对象类型的情况下,仅有false和空数组[]相等,其他都不想等。

综合以上,我们可以总结如下:

当有一个操作数是布尔值时,仅有false==”、false==’0’、false==[]、false==0、true==1几种情况返回true。

二、有一个操作数是数值

1==null;//false
0==null;//false
1==undefined;//false
0==undefined;//false
1=='';//false
0=='';//true
1=='a';//false
0=='a';//false
1=='1';//true
0=='0';//true
Infinit
d910
y=='Infinity';
1=={};//false
0=={};false
1=={a:1};//false
0=={a:1};//false
1==[];//true
0==[];//false
1==[1,2];//false
0==[1,2];//false
1==new Date();//false
0==new Date();//false
1==new RegExp();//false
0==new RegExp();//false
1==function(){};//false
0==function(){};//false


总结如下:

数字和和其他类型的相等操作,仅有0==”、0==[]、0==false、1==true、n==’n’(n为数字,且n不为NaN,可以为Infinity)几种情况返回true。

三、有一个操作数是字符串

''==undefined;//false
'a'==undefined;//false
''==null;//false
'a'==null;//false
''=={};//false
'a'=={};//false
''=={a:1};//false
'a'=={a:1};//false
''==[];//true
'a'==[];//false
''==[1,2];//false
'a'==[1,2];//false
''==new Date();//false
'a'==new Date();//false
''==new RegExp();//false
'a'==new RegExp();//false
''==function(){};//false
'a'==function(){};//false


总结如下:

字符串和和其他类型的相等操作,仅有‘’==0、”==[]、”==false、’n’==n(n为数字,且n不为NaN,可以为Infinity) 几种情况返回true。

四、有一个操作数是null、undefined

通过以上,我们已经知道null和undefined和以上类型都不相等。那么和对象、数组、正则、Function、Date呢?

null=={};//false
null=={a:1};//false
null==[];//false
null==[1,2];//false
null==new Date();//false
null==new RegExp();//false
null==function(){};//false

undefined=={};//false
undefined=={a:1};//false
undefined==[];//false
undefined==[1,2];//false
undefined==new Date();//false
undefined==new RegExp();//false
undefined==function(){};//false


总结如下:

null或者undefined和其他类型的相等操作,仅有null==undefined、undefined==null返回true。

五、有一个操作数是对象、数组、正则、函数、Date

当有一个操作数是泛对象时,另一个操作数不是泛对象时,前面的结果无须赘言,全都返回false;

当两个操作数都是泛对象,但彼此细分来类型并不相同时,如下:

{}==function(){};//false,注function(){}=={}报错
Object()==new Date();//false
Object()==[];//false
Object()==new RegExp();//false
[]=={};//false,注{}==[]报错
[]==new RegExp();//false
[]==new Date();//false
[]==function(){};//false
new RegExp()=={};//false
new RegExp()==[];//false
new RegExp()==new Date();//false
new RegExp()==function(){};//false
new Date()=={};//false
new Date()==[];//false
new Date()==new RegExp();//false
new Date()==function(){};//false
new Function()=={};//false
new Function()==[];//false
new Function()==new Date();//false
new Function()==new RegExp();//false


可以发现,全都返回false。

总结一下:

泛对象类型和其他类型的相等操作,全部返回false,某些形式的比较还会报错。

六、两个相同类型操作数的比较

无须赘言,只需看是否完全相同。需注意的是:

null==null;//true
undefined==undefined;//true
NaN==NaN;//false
Infinity==Infinity;//true
Infinity==-Infinity;//false


七、总结:

综合以上讨论,我们可以得出以下结论:

对于不同类型间的’==’比较:

(1)undefined、null相互之间的比较返回true;

(2)1和true相互之间比较返回true;

(3)‘’、[]、0、false相互之间的比较返回true;

(4)’n’==n(n为数字,且n不为NaN,可以为Infinity) 返回true;

(5)’0’和false相互之间的比较返回true;

(5)在比较不报错的其他情况下,均返回false。

需额外注意:

‘0’和”、’0’==[]相互间比较返回false。

对于相同类型的比较:

只需看值是否相同,相同则返回true,例外是NaN==NaN返回false。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐