首頁  >  文章  >  web前端  >  全面了解javascript運算符之邏輯運算符

全面了解javascript運算符之邏輯運算符

怪我咯
怪我咯原創
2017-04-01 09:19:061572瀏覽

前面的話
邏輯#運算子對運算元進行布林運算,常常和關係運算子一樣配合使用。邏輯運算子將多個關係表達式組合起來組成一個更複雜的表達式。邏輯運算子分為邏輯非'!'、邏輯與'&&'、邏輯或'||'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

同樣地,邏輯或運算子也可以多個連用,傳回第一個布林值為true的運算式的值

console.log(false || 0 || '' || 4 || 'foo' || true);// 4

邏輯或運算子常用於為變數設定預設值

//如果没有向参数p传入任何对象,则将该参数默认设置为空对象
function fn(p){
  p = p || {};
}

全面了解javascript運算符之邏輯運算符

#

以上是全面了解javascript運算符之邏輯運算符的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn