JavaScript邏輯運算符相關(guān)總結(jié)
前言
關(guān)于 JavaScript 中的邏輯運算符,我們經(jīng)常使用卻可能不知道它的一些機制和用法。
機制
首先我們需要知道幾種邏輯運算符的優(yōu)先級是不同的(關(guān)于完整的運算符優(yōu)先級,看運算符優(yōu)先級),邏輯非>邏輯與>邏輯或>條件運算符(三目運算符)。運算順序條件運算符是從右向左,而邏輯與和邏輯或都是從左向右。
//表達(dá)式的優(yōu)先級導(dǎo)致結(jié)果不同false && true || true // 結(jié)果為 truefalse && (true || true) // 結(jié)果為 false
邏輯運算表達(dá)式返回的是字表達(dá)式的值,而不是一個 Boolean,只不過很多時候我們使用邏輯表達(dá)式的地方幫我們強制轉(zhuǎn)換了,比如 if 語句等。
邏輯運算符通常用于布爾型(邏輯)值。這種情況下,它們返回一個布爾值。然而, && 和 || 運算符會返回一個指定操作數(shù)的值,因此,這些運算符也用于非布爾值。這時,它們也就會返回一個非布爾型值。
邏輯與 expression1 && expression2 的機制是,如果 expression1 能夠轉(zhuǎn)換為 true 那么返回 expression2 ,否則返回 expression1。
邏輯或 expression1 || expression2 的機制是,如果 expression1 能夠轉(zhuǎn)化為 true 那么返回 expression1,否則返回 expression2。
邏輯非 !expression ,若 expression 能夠轉(zhuǎn)化為 true 則返回 false,否則返回 true。
expression 可能是任何一種類型, 不一定是布爾值。
會被轉(zhuǎn)化為 false 的表達(dá)式有:
null NaN 0 空字符串('' or ’’ or“` “ “`) undefined需要特別注意的是 undefined,有些表達(dá)式返回的是 undefined ,比如沒有設(shè)置 return 的函數(shù)執(zhí)行的返回值就是 undefined。
盡管 && 和 || 運算符能夠使用非布爾值的操作數(shù), 但它們依然可以被看作是布爾操作符,因為它們的返回值總是能夠被轉(zhuǎn)換為布爾值。如果要顯式地將它們的返回值(或者表達(dá)式)轉(zhuǎn)換為布爾值,請使用雙重非運算符(即!!)或者 Boolean 構(gòu)造函數(shù)。
雙重非運算符 !! 可以將任意值強制轉(zhuǎn)換為布爾值,在需要條件判斷的地方經(jīng)常使用。
短路計算
邏輯運算的機制還存在短路計算:
(some falsy expression1) && (expression2) 短路計算的結(jié)果為假。 (some truthy expression1) || (expression2) 短路計算的結(jié)果為真。短路意味著上述表達(dá)式中的 expression2 部分不會被執(zhí)行,因此 expression2 的任何副作用都不會生效(舉個例子,如果 expression 是一次函數(shù)調(diào)用,這次調(diào)用就不會發(fā)生)。造成這種現(xiàn)象的原因是,整個表達(dá)式的值在第一個操作數(shù)被計算后已經(jīng)確定了。
用法
利用 javascript 中邏輯運算符支持任意類型和短路計算的特性我們可以將邏輯運算符運用到一些特殊的地方。
邏輯與
邏輯與可以用來獲得第一個假值,比如 expr1 && expr2 && expr3,當(dāng)其中存在假值的時候會被返回。也可以類推至前面的表達(dá)式都為真的時候執(zhí)行最后一個表達(dá)式來簡化判斷邏輯的代碼,比如 x > 0 && a(),這可以代替 if 語句。
邏輯或
邏輯或可以用來設(shè)置默認(rèn)值,比如你的函數(shù)需要用戶輸入一個參數(shù),如果用戶沒有輸入則給定一個默認(rèn)值。this.a = param || {}。
以上就是JavaScript邏輯運算符相關(guān)總結(jié)的詳細(xì)內(nèi)容,更多關(guān)于JavaScript邏輯運算符的資料請關(guān)注好吧啦網(wǎng)其它相關(guān)文章!
相關(guān)文章:
1. Ajax引擎 ajax請求步驟詳細(xì)代碼2. JS語法也可以有C#的switch表達(dá)式3. JSP實時顯示當(dāng)前系統(tǒng)時間的四種方式示例解析4. python 利用toapi庫自動生成api5. 多級聯(lián)動下拉選擇框,動態(tài)獲取下一級6. 詳解Struts2中對未登錄jsp頁面實現(xiàn)攔截功能7. 老生常談.NET中的 COM 組件8. CSS3+Js實現(xiàn)響應(yīng)式導(dǎo)航條9. CSS3實例分享之多重背景的實現(xiàn)(Multiple backgrounds)10. ASP.NET MVC前臺動態(tài)添加文本框并在后臺使用FormCollection接收值
