最近在項目遇到一個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