邏輯表達(dá)式中與或非的用法詳解
先說(shuō)邏輯與(&&),它可以從三個(gè)層次進(jìn)行理解
第一個(gè)層次最簡(jiǎn)單,就是簡(jiǎn)單的布爾值之間的邏輯與,就是左值和右值都是true時(shí),返回true,兩邊都是false或者兩邊的值其中一邊是fasle,就返回false;(AND操作);
第二個(gè)層次,(false,null,indefined,0,-0,NaN和""這些都是假值,其他所有的值包括對(duì)象都是真值),對(duì)這些"真值"和"假值"進(jìn)行AND操作,返回一個(gè)"真值"或者"假值";
值得注意的是,(&&)并不返回一直的是布爾值,他會(huì)返回第二個(gè)層次出現(xiàn)的真值或者假值,,但是這些"真值"和"假值"到底是什么值呢?所以引入第三層的理解
第三個(gè)層次的理解,其實(shí)也簡(jiǎn)單,當(dāng)語(yǔ)句中的左操作數(shù)是假值時(shí),就不對(duì)語(yǔ)句的右操作數(shù)進(jìn)行運(yùn)算了,直接返回左操作數(shù)作為表達(dá)式的運(yùn)算結(jié)果;當(dāng)左操作數(shù)是真值時(shí),將右操作數(shù)的值返回,作為表達(dá)式的運(yùn)算結(jié)果,
舉個(gè)例子如下:
var o={s:1}; //創(chuàng)建一個(gè)對(duì)象 var p=null; //創(chuàng)建了一個(gè)null o&&o.s //返回1,應(yīng)為o是真值,所以返回o.s的值 p&&p.x //返回null,應(yīng)為p是假值,所以不去計(jì)算p.x,直接返回p的值 <br>o&&o.b; //這樣會(huì)拋出一個(gè)類型錯(cuò)誤異常,因?yàn)閛為真值,需要返回o.b,但是o.b并不存在,
這樣就好理解了
雖然&&可以用來(lái)返回真值和假值,但是大多數(shù)情況下,真值就是true,假值就是false;
再說(shuō)一下邏輯或(||),舉一反三,邏輯與也有與邏輯或類似的三個(gè)層次理解,就不詳細(xì)寫(xiě)了
邏輯與最常用的方法是從一群備選的操作數(shù)中選出一個(gè)真值的表達(dá)式
舉個(gè)例子
var min =min_value||sum.min_value||100;
先找到min_value,如果它沒(méi)有定義,那就在sum對(duì)象中查找,如果還沒(méi)有,只能給它賦值一個(gè)死值100,
這種方法通常用在函數(shù)中給參數(shù)設(shè)置默認(rèn)值
舉個(gè)例子
function add(a,b){ b=b||0; return a+b; }
當(dāng)不對(duì)b設(shè)置初始值時(shí),b等于0;add函數(shù)返回的就是a+0,也就是a的值;
邏輯非(!)
他的目的是將操作數(shù)的布爾值進(jìn)行求反,例如:如果x是真值,!x返回false,如果x是假值,!x返回true。
返回布爾值時(shí),已經(jīng)將這些真值啊,假值啊轉(zhuǎn)換成了布爾值,再對(duì)其進(jìn)行求反。
這里介紹一種!的常見(jiàn)用法
有時(shí)候我們需要對(duì)一個(gè)變量查檢其是否存在或者檢查值是否有一個(gè)有效值,就使用!!,
例如,檢測(cè)一個(gè)從一個(gè)函數(shù)返回的值student是否是個(gè)有效值,就使用 !!student,如果他返回是true,那么他就是一個(gè)有效值。
以上所述是小編給大家介紹的邏輯表達(dá)式中與或非的用法詳解的相關(guān)知識(shí),希望對(duì)大家有所幫助!
相關(guān)文章
JavaScript實(shí)現(xiàn)翻頁(yè)功能(附效果圖)
這篇文章主要介紹了JavaScript實(shí)現(xiàn)翻頁(yè)功能(附效果圖),在項(xiàng)目需求中經(jīng)常遇到,今天小編抽時(shí)間給大家分享JavaScript實(shí)現(xiàn)翻頁(yè)功能實(shí)例代碼,需要的朋友參考下吧2017-02-02Javascript 事件捕獲的備忘(setCapture,captureEvents)
Javascript 事件捕獲的備忘(setCapture,captureEvents)...2006-09-09HTML中Select不用Disabled實(shí)現(xiàn)ReadOnly的效果
Disabled ReadOnly之家的聯(lián)系2008-04-04js面向?qū)ο髮?shí)現(xiàn)canvas制作彩虹球噴槍效果
這篇文章主要介紹了js面向?qū)ο髮?shí)現(xiàn)canvas制作彩虹球噴槍效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-09-09實(shí)現(xiàn)高性能javascript的注意事項(xiàng)
JavaScript代碼在web應(yīng)用程序中經(jīng)常用到,但是很多開(kāi)發(fā)者忽視了一些性能方面的知識(shí),如何編寫(xiě)高性能javascript代碼呢?接下來(lái),小編跟大家一起學(xué)習(xí)2019-05-05JS中setInterval、setTimeout不能傳遞帶參數(shù)的函數(shù)的解決方案
在JS中無(wú)論是setTimeout還是setInterval,在使用函數(shù)名作為調(diào)用句柄時(shí)都不能帶參數(shù),而在許多場(chǎng)合必須要帶參數(shù),接下來(lái)為大家介紹具體的解決方法2013-04-04普通js文件里面如何訪問(wèn)vue實(shí)例this指針
這篇文章主要介紹了普通js文件里面如何訪問(wèn)vue實(shí)例this指針,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-08-08