【JavaScript】JavaScript賦值語句中的邏輯與&&和邏輯或||


在其他語言中,我們往往看到邏輯符號出現在判斷語句當中,如

if(a||b){}  

但在一些js相關的面試題或者書中,我們有時會看到邏輯與&&和邏輯或||符號出現在賦值語句或者返回語句中,如

var x=a||b;
return a&&b||c;

第一次看到時,我們很可能一頭霧水,這是怎么回事?

 

因為在js中允許使用表達式賦值,所得的值為該表達式的運算結果。如

var a= 5;  
var b= 6;  
var c= a+b;  
a= 10;  
console.log(c);//11  js是按順序進行,之后的賦值不會影響之前已經計算后的表達式結果
var b= 6; 
var c= a+b; 
var a= 5; 
console.log(c);//NaN 
//js雖然是按順序進行,但在js中變量聲明會提前處理,賦值操作只有在進行到該賦值語句時才會執行,所以執行到var c= a+b;時,
a只定義未賦值。返回 not a num

 

我們知道,

邏輯與&&的運算規則:只有左右都是true時才為true,一邊是false時就是false。

邏輯或 | | 的運算規則:只有左右都是false時才為false,一個為true時就是true。

 

那么,在賦值語句和返回語句中邏輯與&&和邏輯或||又是怎樣呢?

賦予的和返回的值也不是判斷得到的布爾值,而是運算符左右兩旁某個表達式的運算結果。

對邏輯與&&來說:

當有一個false時,返回false一側的值;

當有兩個false時,返回運算符之前(左側)的值;

當有兩個true時,返回運算符之后(右側)的值。

邏輯與&&運算屬於短路運算,在按從左向右的運算順序運算時,如果一個為假,即停止運算,並返回為假的值。如,

var a={};  
var b=56;  
//window.aaa為一個不存在的對象,  
console.log(window.aaa && null);   //undefined  
console.log(null && window.aaa);   //null  
console.log(a && null);                //null  
console.log(window.aaa&& a);      //undefined  
console.log(a && b);                   //56  
console.log(b && a);                   //object {}  

 

對邏輯或 | | 來說,正好同邏輯與&&相反:

當有一個true時,返回true一側的值;

當有兩個true時,返回運算符之前(左側)的值;

當有兩個false時,返回運算符之后(右側)的值。

邏輯或 | | 運算也屬於短路運算,在按從左向右的運算順序運算時,只有第一個操作數為假,才進行第二個操作數,返回停止運算一側的值,如

var a={};  
var b=56;  
console.log(window.aaa || null);   //null 
console.log(null || window.aaa);   //window.aaa 
console.log(a || null);                //object {} 
console.log(window.aaa|| a);      //object {}
console.log(a || b);                   //object {}  
console.log(b || a);                   //56 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM