徹底理解js中的&&和||

javascript中,&&和||的用法比較神奇,經(jīng)常用在對象上,例如a || b,如果a不存在,則返回b。a && b,如果a存在,則返回b,否則返回a。

光這樣看,感覺他的概念還挺復(fù)雜的,這樣去想的話,不但會在腦子里多出一個無用的概念,而且越記越混亂??磫栴}還是要看本質(zhì)。


本質(zhì)是什么呢?&& 和 || 的作用只有一個(定義):

進行布爾值的且和或的運算。當(dāng)運算到某一個變量就得出最終結(jié)果之后,就返回哪個變量。


在javascript中:

以下內(nèi)容會被當(dāng)成false處理:"" , false , 0 , null , undefined , NaN

其他都是true。注意:字符串"false"也會被當(dāng)做true處理,在未轉(zhuǎn)型的情況下他是字符串,屬于一個對象,所以是true。


所以:

a || b:如果a是true,那么b不管是true還是false,都返回true。因此不用判斷b了,這個時候剛好判斷到a,因此返回a。

   如果a是false,那么就要判斷b,如果b是true,那么返回true,如果b是false,返回false,其實不就是返回b了嗎。

a && b:如果a是false,那么b不管是true還是false,都返回false,因此不用判斷b了,這個時候剛好判斷到a,因此返回a。

   如果a是true,那么就要在判斷b,和剛剛一樣,不管b是true是false,都返回b。


來個復(fù)雜的例子(注意一點:在js中&&運算符優(yōu)先級大于||)

假設(shè):

var?a=new?Object(),b=0,c=Number.NaN,d=1,e="Hello";

?alert(a || b && c || d && e);?表達式從左往右執(zhí)行,先&&后||

1、(b && c):b是false,此時不需要判斷c,因為不管c是true是false,最終結(jié)果一定是false,因此返回當(dāng)前判斷對象b,也就是0;

2、(d && e):d是true,這個時候判斷e,此時不管e是true,是false,返回結(jié)果一定是e,e為true,因此返回"Hello";

3、(a || b):a是true,此時不管b是true是false,結(jié)果都是true,所以不判斷b,所以返回當(dāng)前判斷對象a,因此返回new Object();

4、(a || e):同上,因此返回a。

這個表達式最終結(jié)果為a,也就是new Object()

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 專業(yè)考題類型管理運行工作負責(zé)人一般作業(yè)考題內(nèi)容選項A選項B選項C選項D選項E選項F正確答案 變電單選GYSZ本規(guī)程...
    小白兔去釣魚閱讀 10,461評論 0 13
  • ¥開啟¥ 【iAPP實現(xiàn)進入界面執(zhí)行逐一顯】 〖2017-08-25 15:22:14〗 《//首先開一個線程,因...
    小菜c閱讀 7,295評論 0 17
  • 高級鉗工應(yīng)知鑒定題庫(858題) ***單選題*** 1. 000003難易程度:較難知識范圍:相關(guān)4 01答案:...
    開源時代閱讀 6,286評論 1 9
  • "use strict";function _classCallCheck(e,t){if(!(e instanc...
    久些閱讀 2,132評論 0 2
  • 1. 關(guān)于診斷X線機準直器的作用,錯誤的是()。 (6.0 分) A. 顯示照射野 B. 顯示中心線 C. 屏蔽多...
    我們村我最帥閱讀 11,369評論 0 5

友情鏈接更多精彩內(nèi)容