接觸專案**的時候經常可以看到例如這樣的**:
this
.props.planelist &&
this
.props.planelist.differentialconfig &&
this
.props.planelist.differentialconfig.lowpricerule &&
this
.props.planelist.differentialconfig.lowpricerule.reasonlib.
map(i => i.id)
;
這是確保在資料可能出現字段丟失時常用的**邏輯,剛開始很困惑,為什麼不直接判斷最後乙個而要寫這麼長把每一步都判斷呢?
this
.props.planelist.differentialconfig.lowpricerule.reasonlib &&
this
.props.planelist.differentialconfig.lowpricerule.reasonlib.
map(i => i.id)
;
經過自己寫的幾個deme,發現這樣寫的好處就是可以避免報錯影響後面**執行。這裡貼上我的例子:
//獲得的資料
var data =
}//資料正常情況
data && data.a && data.a.b && console.
log(
'bingo');
//bingo
//資料出錯情況,欄位中不存在data.a.c
//直接判斷最後一步,當找不到時會**直接報錯
data.a.c && console.
log(
'bingo');
//error!報錯
console.
log(
'next');
//不輸出
//逐步判斷,當找不到時不會報錯只是不往後執行
data && data.a && data.a.c && console.
log(
'bingo');
//undefined
console.
log(
'next');
//next
其實很好解釋,js中&&
是從前往後判斷,當前乙個值為true
時繼續往後執行,並返回第乙個為false
之前的那個值,但如果訪問值的時候報錯就會直接中斷執行,丟擲錯誤。這裡推薦用|| ''
來做乙個錯誤避免的方式
data && data.a && data.a.c && console.
log(
'binggo')||
''
關於使用DFS,BFS的一些思考總結
總的來說,dfs和bfs是一種遍歷策略,整體執行的框架是固定的,但是具體處理以及函式的形參是需要根據具體問題具體來定的。也就是說,在bfs或者dfs的時候,首先需要搞明白的是 遍歷的目的是什麼。計算引數是比較常見的題目,只標記結點是否訪問在計算連通塊個數時總結過。詳細說一下計算引數問題。可以在形參中...
關於SpringIOC的一些思考
ioc是 依賴倒置原則 的乙個特例,說其是特例,就是說其具有 依賴倒置原則 的性質。依賴倒置原則強調的兩點是 上層模組和下次模組都依賴於抽象,二者之間通過這種抽象的東西聯絡在一起 具體可以依賴於抽象,而抽象不能依賴於具體。我認為spring提倡的 基於介面程式設計 就是為了遵循 依賴倒置原則 其中所...
關於sizeof 的一些思考
今天面試被問到sizeof,回來整理一下。1 定義 sizeof是c c 中的乙個操作符 operator 作用就是返回乙個物件或者型別所佔的記憶體位元組數。msdn上的解釋為 the sizeof keyword gives the amount of storage,in bytes,assoc...