前面的話
邏輯#運算子對運算元進行布林運算,常常和關係運算子一樣配合使用。邏輯運算子將多個關係表達式組合起來組成一個更複雜的表達式。邏輯運算子分為邏輯非'!'、邏輯與'&&'、邏輯或'||'3種,本文將介紹這三種邏輯運算子
邏輯非
#邏輯非運算元由嘆號(!)表示,可以套用於ECMAScript中的任何值。無論這個值是什麼資料型別,這個運算子都會傳回一個布林值。邏輯非運算子首先會將它的運算元轉換成一個布林值,然後再對其求反
邏輯非對運算元轉為布林型別的轉換型別與Boolean()轉型函數相同,只不過最後再將結果取反。而如果同時使用兩個邏輯非運算符,實際上就會模擬Boolean()轉型函數的行為
console.log(!!undefined);//false console.log(!!null);//false console.log(!!0);//false console.log(!!-0);//false console.log(!!NaN);//false console.log(!!'');//false console.log(!!false);//false
console.log(!!{});//true console.log(!![]);//true console.log(!!new Boolean(false));//true console.log(!!false);//false console.log(!!new Boolean(null));//true console.log(!!null);//false
//Boolean 变量(bFound)用于记录检索是否成功。找到问题中的数据项时,bFound 将被设置为true,!bFound将等于false,意味着运行将跳出while循环 var bFound = false; var i = 0; while (!bFound) { if (aValue[i] == vSearchValues) { bFound = true; } else { i++; } }
#邏輯與
邏輯與運算子由兩個和號(&&)表示,有兩個運算元,只有在兩個運算元都為true時,結果才會回傳true,否則傳回false
//逻辑与(&&)的真值表 第一个操作数 第二个操作数 结果 true true true true false false false true false false false alse
邏輯與運算可以套用到任何類型的操作數,而不僅僅是布林值。如果其中一個運算元不是布林值,邏輯與運算不一定會傳回布林值
邏輯與運算屬於短路操作,如果第一個運算元能夠決定結果,那麼就不會再對第二個操作數求值
對於邏輯與而言,如果第一個操作數是false,則無論第二個操作數是什麼值,結果都是false,則傳回第一個操作數;如果第一個運算元為true,則結果的真假和第二個運算元的真假相同,則傳回第二個運算元
//除了false、undefined、null、+0、-0、NaN、''这7个假值,其余都是真值 console.log('t' && ''); //因为't'是真值,所以返回'' console.log('t' && 'f'); //因为't'是真值,所以返回'f' console.log('t' && 1 + 2); //因为't'是真值,所以返回3 console.log('' && 'f'); //因为''是假值,所以返回'' console.log('' && ''); //因为''是假值,所以返回''
var i = 1; var result = (true && i++); console.log(result,i);//因为true是真值,所以执行i++,i是2,result是1 var i = 1; var result = (false && i++); console.log(result,i);//因为false是假值,所以不执行i++,i是1,result是false
邏輯與運算子可以多個連用,傳回第一個布林值為false的表達式的值
console.log(true && 'foo' && '' && 4 && 'foo' && true);// ''
關係運算子的優先權比邏輯與(&&)和邏輯或(||)的優先權高,所以類似表達式可以直接書寫,不用補充圓括號
if(a+1==2 && b+2==3){ //Todo }
可以使用邏輯與運算子來取代if結構
if (a == b) { doSomething(); } // 等价于 (a == b) && doSomething();
邏輯與運算子常用於回呼函數使用中
//若没有给参数a传值,则a为默认的undefined,是假值,所以不执行a(),防止报错,如果给参数a传值,则执行函数a() function fn(a){ if(a){ a(); } } //等价于 function fn(a){ a && a(); }
邏輯或
##邏輯或運算子由兩個垂直線(||)表示,有兩個運算元,只有在兩個運算元都是false時,結果才會回傳false,否則傳回true
//逻辑或(||)的真值表 第一个操作数 第二个操作数 结果 true true true true false true false true true false false false同樣地,邏輯或操作也可以應用於任何類型的操作數,而不僅僅是布林值。如果其中一個運算元不是布林值,邏輯或運算不一定會傳回布林值邏輯或運算也屬於短路運算,如果第一個運算元能夠決定結果,那麼就不會再對第二個操作數求值
對於邏輯或而言,如果第一個操作數是true,則無論第二個操作數是什麼值,結果都是true,則傳回第一個操作數;如果第一個運算元是fales,則結果的真假和第二個運算元的真假相同,則傳回第二個運算元
console.log('t' || '');//因为't'是真值,所以返回"t" console.log('t' || 'f');//因为't'是真值,所以返回"t" console.log('' || 'f');//因为''是假值,所以返回"f" console.log('' || '');//因为''是假值,所以返回""
##
var i = 1; var result = (true || i++); console.log(result,i);//因为true是真值,所以不执行i++,result是true,i是1 var i = 1; var result = (false || i++); console.log(result,i);//因为false是假值,所以执行i++,i是2,result是1
console.log(false || 0 || '' || 4 || 'foo' || true);// 4
//如果没有向参数p传入任何对象,则将该参数默认设置为空对象 function fn(p){ p = p || {}; }
#
以上是全面了解javascript運算符之邏輯運算符的詳細內容。更多資訊請關注PHP中文網其他相關文章!