一些怪癖的类型转换求解答!

收集了一些比较怪的类型转换,我不懂原因,大家讨论讨论这是为什么?
[]==![]//true
'1'==true//true
'2'==true//false
'3'==true//false
null>=0//true
{}+1//1
{vara=10}+1//1
{}+{}//"[objectObject][objectObject]"
+[]//0
{}+[]//0
[1,2]+[3,4]//"1,23,4"
+[2]//2
[2]+1//"21"
[2]+(-1)//"2-1"
null特殊情况
+null//0
null==0//false
null>0//false
null<0//false
!!null//false
null==false//false
null==true//false
慕斯709654
浏览 249回答 2
2回答

慕仙森

使用==进行比较,如果比较的类型不同,可以分为四种情况1.字符串与数字之间的相等比较,此时字符串会被强制转换为数字2.其他类型和布尔值类型之间的相等比较,布尔值会被强制转换为数字,true转为1,false转为03.null和undefined之间的相等比较,null==undefined返回true4.对象和非对象之间的相等比较,对象需要进行ToPrimitive抽象操作(如toString(),valueOf())根据上面的四条规律,来理解下面几题:[]==![]相当于[]==false相当于''==false相等于''==0相当于0==0因此结果为true'1'==true相当于'1'==1相当于1==1因此结果为true'2'==true相当于'2'==1相当于2==1因此结果为false'3'==true相当于'3'==1相当于3==1因此结果为false根据规范a

守着星空守着你

[]==![]=>[]==false(数组取反)=>''==false([]转原始值)=>0===0(调用Number转换)'1'==ture=>1===1(调用Number)'2'==true=>2===1(调用Number)'3'==true=>3===1(调用Number)null>=0=>0>=0(调用Number){}+1=>+1=>1(前一个{}被认为是一个空代码块){vara=10}+1=>+1(类似上面等价于"+1"){}+{}=>[objectObject]+[objectObject](左右两边被认为为对象分别调用toString()并相加)[]=>+0(调用Number){}+[]=>+[]("{}"被认为是空代码块)=>+0(调用Number)[1,2]+[3,4]=>'1,2'+'3,4'(调用toString)[2]=>+2(调用Number)[2]+1=>'2'+1(先求原始值调用toString)=>'21'(存在string优先转化为string)[2]+(-1)=>'2'+-1(先求原始值调用toString)=>'2-1'(存在string优先转化为string)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript