在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問(wèn)答/HTML/ 關(guān)于和后端對(duì)接數(shù)據(jù),空值判斷的問(wèn)題

關(guān)于和后端對(duì)接數(shù)據(jù),空值判斷的問(wèn)題

大家在拿到后端的數(shù)據(jù),要綁到頁(yè)面上的時(shí)候,空值判斷一般是怎么處理的?

比如說(shuō)前端要一個(gè)List,Array類型,但后端沒(méi)查到,你想著會(huì)給你個(gè)[],但就給你返回個(gè)null,這就導(dǎo)致前端取length的時(shí)候就報(bào)錯(cuò)了,難道每次都要寫(xiě)if判斷嗎?

if (res.list !== null) {
    this.list = res.list;
}

請(qǐng)問(wèn)有什么干凈效率的辦法?

回答
編輯回答
初念

假如后端返回res對(duì)象,res.body希望是個(gè)數(shù)組,但是實(shí)際返回一個(gè)null

那么在不考慮深復(fù)制淺復(fù)制問(wèn)題的前提下

let newArray = res.body || []

console.log(newArray.length)

這樣至少可以保證不會(huì)得到null

2018年1月4日 18:02
編輯回答
話寡

可以寫(xiě)成這樣,this.list = res.list || []。

2017年11月2日 20:03
編輯回答
笨尐豬

后端輸出json類型數(shù)據(jù),前端js把json字符串解析為js對(duì)象(JSON.parse()),若是空,那不就自動(dòng)獲取到了[]或{},我是這樣認(rèn)為的

2017年11月10日 18:10
編輯回答
好難瘦

有一種能比這種有效率一點(diǎn),三目運(yùn)算符,還加了一個(gè)空值的顯示。{{ list!=null?list:"-" }}
或者說(shuō)如果都沒(méi)數(shù)據(jù),就不顯示這部分,那么可以<template v-if="list!=null?true:false">你的內(nèi)容</template>

2018年4月30日 01:50
編輯回答
朽鹿

根據(jù)你的需求,還是去攻略后端別給空吧。

2017年3月4日 20:40
編輯回答
柒喵

此類問(wèn)題,個(gè)人建議封裝一個(gè)函數(shù)統(tǒng)一處理下,我這邊寫(xiě)了一個(gè)僅供參考,這也是我們目前使用的方案:

// Object、Array、String、Number、Boolean、Function
function typeOf (obj) {
  return toString.call(obj).slice(8, -1)
}

function isEmpty (obj) {
  let bool = false;
  switch (typeOf(obj)) {
    case 'Object':
      bool = Object.keys(obj).length ? true : false; // 這是es6寫(xiě)法 您也可以用JSON.stringify(obj) == '{}' 或  用for ... in
      break;
    case 'Array':
      bool = obj.length ? true : false;
      break;
    default:
      bool = obj ? true : false;  // 對(duì)于String、Number、Boolean、Function這幾種類型,您可以根據(jù)自己的需求添加相應(yīng)的邏輯
  }
  return bool;
}

使用示例:

clipboard.png

2017年4月21日 08:42
編輯回答
久不遇

跟后端說(shuō),不許返回null。他不干就揍他,你要是打不過(guò),就乖乖加判斷

2018年7月14日 14:42
編輯回答
硬扛

這是后端返回的數(shù)據(jù)不規(guī)范造成的,你可以要求后端修改。不過(guò)前端也有處理辦法。比如:收到這樣的數(shù)據(jù):var result = {"status":0,"data":{"books":null,"total":"0"},"message":""},你可以這樣做
result.data.books = result.data.books || []

2018年6月11日 18:00
編輯回答
絯孑氣

需要根據(jù)業(yè)務(wù)邏輯來(lái)確定再向下走下去不正交(也就是會(huì)對(duì)其他地方有影響)那么立即阻止,否則就像你說(shuō)的,只是單純的數(shù)據(jù)類型變化了,可以根據(jù)場(chǎng)景自己寫(xiě)個(gè)util嘛,接6大數(shù)據(jù)類型,根據(jù)數(shù)據(jù)格式的不同還可以擴(kuò)展(比如blob類型等等), validateDataType(String,var,(err)=>{}) 如果是多層嵌套判斷值的存在, throw Error || callback 都可以呀,推薦使用類似 loadsh 里面的get解決,.

永遠(yuǎn)記住一個(gè)道理,不經(jīng)過(guò)抽象的代碼就像一盤(pán)散沙,積累的越多,到時(shí)候你收拾的越麻煩。。千萬(wàn)不能每個(gè)地方寫(xiě)if

2017年11月17日 18:21
編輯回答
病癮
//我是這么寫(xiě)的
//數(shù)組 前者可判斷為null,后者為[]
if( !res.list || res.list.length == 0 ) return;
.... //要做的事情
//對(duì)象格式 {"status":0,"data":{"books":null,"total":"0"},"message":""}
if( !res || res.message == false) return;
.... //要做的事情  
 
2017年4月21日 15:17