三目運算符是一個很方便快捷的書寫一些簡單的邏輯語句的方式:
x > 100 ? 'Above 100' : 'Below 100';
x > 100 ? (x > 200 ? 'Above 200' : 'Between 100-200') : 'Below 100';
但是有些時候當(dāng)邏輯復(fù)雜之后,三目運算符書寫起來可讀性也會很難又兵。這個時候埋合,我們就可以使用邏輯與(&&)和邏輯或(||)運算符來改寫我們的表達式虾标。
邏輯與和邏輯或操作符總是先計算其做操作數(shù)淮阐,只有在僅靠左操作數(shù)的值無法確定該邏輯表達式的結(jié)果時,才會求解其右操作數(shù)矩乐。這被稱為“短路求值(Short-Circuit Evaluation)”
工作原理
與(&&)運算符將會返回第一個false/‘falsy’的值龄句。當(dāng)所有的操作數(shù)都是true時,將返回最后一個表達式的結(jié)果散罕。
let one = 1, two = 2, three = 3;
console.log(one && two && three); // Result: 3
console.log(0 && null); // Result: 0
或(||)運算符將返回第一個true/‘truthy’的值分歇。當(dāng)所有的操作數(shù)都是false時,將返回最后一個表達式的結(jié)果欧漱。
let one = 1, two = 2, three = 3;
console.log(one || two || three); // Result: 1
console.log(0 || null); // Result: null
場景舉例
當(dāng)我們從服務(wù)器端請求數(shù)據(jù)的過程中职抡,我們在另一個位置來使用這個數(shù)據(jù),但是獲取數(shù)據(jù)的狀態(tài)并不知道硫椰,如我們訪問this.state的data屬性繁调。按照常規(guī)的方式我們會先去判斷這個this.state.data的有效性,之后根據(jù)有效性情況分別進行區(qū)分處理靶草。
if (this.state.data) {
return this.state.data;
} else {
return 'Fetching Data';
}
但是我們可以通過上面的方式來簡寫這個邏輯處理
return (this.state.data || 'Fetching Data');
對比下不難發(fā)現(xiàn)這個方式更加的簡潔方便。