JavaScript邏輯運(yùn)算符相關(guān)總結(jié)
前言
關(guān)于 JavaScript 中的邏輯運(yùn)算符,我們經(jīng)常使用卻可能不知道它的一些機(jī)制和用法。
機(jī)制
首先我們需要知道幾種邏輯運(yùn)算符的優(yōu)先級(jí)是不同的(關(guān)于完整的運(yùn)算符優(yōu)先級(jí),看運(yùn)算符優(yōu)先級(jí)),邏輯非>邏輯與>邏輯或>條件運(yùn)算符(三目運(yùn)算符)。運(yùn)算順序條件運(yùn)算符是從右向左,而邏輯與和邏輯或都是從左向右。
//表達(dá)式的優(yōu)先級(jí)導(dǎo)致結(jié)果不同 false && true || true // 結(jié)果為 true false && (true || true) // 結(jié)果為 false
邏輯運(yùn)算表達(dá)式返回的是字表達(dá)式的值,而不是一個(gè) Boolean
,只不過(guò)很多時(shí)候我們使用邏輯表達(dá)式的地方幫我們強(qiáng)制轉(zhuǎn)換了,比如 if
語(yǔ)句等。
邏輯運(yùn)算符通常用于布爾型(邏輯)值。這種情況下,它們返回一個(gè)布爾值。然而, && 和 || 運(yùn)算符會(huì)返回一個(gè)指定操作數(shù)的值,因此,這些運(yùn)算符也用于非布爾值。這時(shí),它們也就會(huì)返回一個(gè)非布爾型值。
邏輯與 expression1 && expression2
的機(jī)制是,如果 expression1
能夠轉(zhuǎn)換為 true
那么返回 expression2
,否則返回 expression1
。
邏輯或 expression1 || expression2
的機(jī)制是,如果 expression1
能夠轉(zhuǎn)化為 true
那么返回 expression1
,否則返回 expression2
。
邏輯非 !expression
,若 expression
能夠轉(zhuǎn)化為 true
則返回 false
,否則返回 true
。
expression 可能是任何一種類型, 不一定是布爾值。
會(huì)被轉(zhuǎn)化為 false
的表達(dá)式有:
- null
- NaN
- 0
- 空字符串("" or '' or“` “ “`)
- undefined
需要特別注意的是
undefined
,有些表達(dá)式返回的是undefined
,比如沒(méi)有設(shè)置return
的函數(shù)執(zhí)行的返回值就是undefined
。
盡管 &&
和 ||
運(yùn)算符能夠使用非布爾值的操作數(shù), 但它們依然可以被看作是布爾操作符,因?yàn)樗鼈兊姆祷刂悼偸悄軌虮晦D(zhuǎn)換為布爾值。如果要顯式地將它們的返回值(或者表達(dá)式)轉(zhuǎn)換為布爾值,請(qǐng)使用雙重非運(yùn)算符(即!!
)或者 Boolean
構(gòu)造函數(shù)。
雙重非運(yùn)算符
!!
可以將任意值強(qiáng)制轉(zhuǎn)換為布爾值,在需要條件判斷的地方經(jīng)常使用。
短路計(jì)算
邏輯運(yùn)算的機(jī)制還存在短路計(jì)算:
(some falsy expression1) && (expression2)
短路計(jì)算的結(jié)果為假。(some truthy expression1) || (expression2)
短路計(jì)算的結(jié)果為真。
短路意味著上述表達(dá)式中的 expression2
部分不會(huì)被執(zhí)行,因此 expression2
的任何副作用都不會(huì)生效(舉個(gè)例子,如果 expression
是一次函數(shù)調(diào)用,這次調(diào)用就不會(huì)發(fā)生)。造成這種現(xiàn)象的原因是,整個(gè)表達(dá)式的值在第一個(gè)操作數(shù)被計(jì)算后已經(jīng)確定了。
用法
利用 javascript
中邏輯運(yùn)算符支持任意類型和短路計(jì)算的特性我們可以將邏輯運(yùn)算符運(yùn)用到一些特殊的地方。
邏輯與
邏輯與可以用來(lái)獲得第一個(gè)假值,比如 expr1 && expr2 && expr3
,當(dāng)其中存在假值的時(shí)候會(huì)被返回。也可以類推至前面的表達(dá)式都為真的時(shí)候執(zhí)行最后一個(gè)表達(dá)式來(lái)簡(jiǎn)化判斷邏輯的代碼,比如 x > 0 && a()
,這可以代替 if
語(yǔ)句。
邏輯或
邏輯或可以用來(lái)設(shè)置默認(rèn)值,比如你的函數(shù)需要用戶輸入一個(gè)參數(shù),如果用戶沒(méi)有輸入則給定一個(gè)默認(rèn)值。this.a = param || {}
。
以上就是JavaScript邏輯運(yùn)算符相關(guān)總結(jié)的詳細(xì)內(nèi)容,更多關(guān)于JavaScript邏輯運(yùn)算符的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
- JavaScript中展開(kāi)運(yùn)算符及應(yīng)用的實(shí)例代碼
- 原生js中運(yùn)算符及流程控制示例詳解
- JS運(yùn)算符優(yōu)先級(jí)與表達(dá)式示例詳解
- JavaScript中使用Spread運(yùn)算符的八種方法總結(jié)
- 詳解JavaScript中的Object.is()與"==="運(yùn)算符總結(jié)
- JavaScript布爾運(yùn)算符原理使用解析
- js表達(dá)式與運(yùn)算符簡(jiǎn)單操作示例
- JS運(yùn)算符簡(jiǎn)單用法示例
- javascript的delete運(yùn)算符知識(shí)點(diǎn)總結(jié)
- 分享幾個(gè)JavaScript運(yùn)算符的使用技巧
相關(guān)文章
走進(jìn)javascript——不起眼的基礎(chǔ),值和分號(hào)
本文主要介紹了javascript的基礎(chǔ)知識(shí)--值和分號(hào),具有很好的參考價(jià)值,下面跟著小編一起來(lái)看下吧2017-02-02JavaScript面向?qū)ο笕齻€(gè)基本特征實(shí)例詳解【封裝、繼承與多態(tài)】
這篇文章主要介紹了JavaScript面向?qū)ο笕齻€(gè)基本特征,結(jié)合實(shí)例形式詳細(xì)分析了JavaScript面向?qū)ο笕齻€(gè)基本特征封裝、繼承與多態(tài)的概念、原理、用法與操作注意事項(xiàng),需要的朋友可以參考下2020-05-05解決循環(huán)中setTimeout執(zhí)行順序的問(wèn)題
今天小編就為大家分享一篇解決循環(huán)中setTimeout執(zhí)行順序的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-06-06javascript 像素拼圖實(shí)現(xiàn)代碼
非常不錯(cuò)的像素拼圖效果2009-04-04JavaScript中函數(shù)的防抖與節(jié)流詳解
這篇文章主要為大家詳細(xì)介紹了JavaScript中函數(shù)的防抖與節(jié)流,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助2022-02-02原生JS實(shí)現(xiàn)京東查看商品點(diǎn)擊放大
這篇文章主要為大家詳細(xì)介紹了原生JS實(shí)現(xiàn)京東查看商品點(diǎn)擊放大,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-12-12js 彈出對(duì)話框(遮罩)透明,可拖動(dòng)的簡(jiǎn)單實(shí)例
下面小編就為大家?guī)?lái)一篇js 彈出對(duì)話框(遮罩)透明,可拖動(dòng)的簡(jiǎn)單實(shí)例。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-07-07