一毅整、概述
布爾運算符用于將表達式轉為布爾值功咒,一共分為四個運算符:
- 取反運算符
!
- 且運算符
&&
- 或運算符
||
- 三元運算符
?:
二跋理、取反運算符:
1震放、取反運算符用于將布爾值變?yōu)橄喾粗当饶瑢τ诜遣紶栔祷媚螅》催\算符會將其轉為布爾值。
!true //false
!false //true
2命咐、以下六個值取反后為true篡九,其他值都為false。
undefined,null,NaN,0,''(空字符串),false醋奠。
三榛臼、 且運算符和或運算符
1伊佃、且運算符和或運算符往往用于多個表達式的求值。
2讽坏、運算規(guī)則:
- 且運算符可以多個連用锭魔,這時返回第一個布爾值為false的表達式的值,不再執(zhí)行后面的表達式路呜。如果所有表達式的布爾值都為true迷捧,則返回最后一個表達式的值。
- 或運算符可以多個連用胀葱,這時返回第一個布爾值為true的表達式的值漠秋,不再執(zhí)行后面的表達式。如果所有表達式的布爾值都為false抵屿,則返回最后一個表達式的值庆锦。
3、短路
var x = 1;
(1 - 1) && ( x += 1) // 0
x // 1
var x = 1;
(1 + 1) || ( x += 1) // 2
x // 1
這種只通過第一個表達式的值轧葛,控制是否運行第二個表達式的機制搂抒,就稱為“短路”(short-cut)。
4尿扯、可能的使用
- 且運算符的"短路"被有些程序員用于取代if結構求晶,比如下面是一段if結構的代碼,就可以用且運算符改寫衷笋。
if (i) {
doSomething();
}
// 等價于
i && doSomething();
上面代碼的兩種寫法是等價的芳杏,但是后一種不容易看出目的,也不容易除錯辟宗,建議謹慎使用爵赵。
- 或運算符常用于為一個變量設置默認值。
function saveText(text) {
text = text || '';
// ...
}
// 或者寫成
saveText(this.text || '')
上面代碼表示泊脐,如果函數(shù)調用時空幻,沒有提供參數(shù),則該參數(shù)默認設置為空字符串晨抡。
四氛悬、三元運算符
三元條件運算符由問號(?)和冒號(:)組成,分隔三個表達式耘柱。它是 JavaScript 語言唯一一個需要三個運算子的運算符。如果第一個表達式的布爾值為true棍现,則返回第二個表達式的值调煎,否則返回第三個表達式的值。
't' ? 'hello' : 'world' // "hello"
0 ? 'hello' : 'world' // "world"
上面代碼的t和0的布爾值分別為true和false己肮,所以分別返回第二個和第三個表達式的值士袄。
通常來說悲关,三元條件表達式與if...else語句具有同樣表達效果,前者可以表達的娄柳,后者也能表達寓辱。但是兩者具有一個重大差別,if...else是語句赤拒,沒有返回值秫筏;三元條件表達式是表達式,具有返回值挎挖。所以这敬,在需要返回值的場合,只能使用三元條件表達式蕉朵,而不能使用if..else崔涂。