最近在项目遇到一个bug,code码返回成功(“0”)的时候页面是可以展示,code码不对(“2012”)的是页面没有按照我写的code的码的处理来展示了。很是郁闷。最后跟踪了一下问题,发现后台返回的code码是string类型的,前端定义的是number类型的。但是问题就是,code码正确的时候为什么能展示了呢?
最后一步步跟踪,发现原来是==和===的区别。。。。我去。。。。
真的是抓狂哇!!!!
错误代码的处理
if (json.code != 0) {
throw { code: json.code, msg: json.message };
}
return json.model;
if (error.code === 2012) {//
进行code码错误的特许处理
.....
}
这两段代码的重点在于 code != 0 和code === 2023的区别了
在code返回的是'0'的时候 表达式code !=0 是false,返回了数据model ,因为==之间的比较是先转化成同一类型后再看值相不相等 ,但是code === 2012的表达式 是false ,所以没有进行我写的错误处理。因为===如果类型不同,则结果就不等了。原来原因就是。。。这里。这就能解释为什么了。。。代码坑。。。
下面对==和===的区别做一个全部的解释
1、对于string,number等基础类型,==和===是有区别的
1)不同类型间比较,==之比较“转化成同一类型后的值”看“值”是否相等,===如果类型不同,其结果就是不等
2)同类型比较,直接进行“值”比较,两者结果一样
2、对于Array,Object等高级类型,==和===是没有区别的
进行“指针地址”比较
3、基础类型与高级类型,==和===是有区别的
1)对于==,将高级转化为基础类型,进行“值”比较
2)因为类型不同,===结果为false