天天看點

JavaScript操作符之邏輯操作符

對于程式設計語言來說,邏輯操作符跟相等操作符幾乎同樣重要。

邏輯操作符一共三個,!(邏輯非)、&&(邏輯與)、||(邏輯或)。

1 !(邏輯非)

這個操作符始終傳回布爾值,無論什麼資料類型,邏輯非操作符始終先将操作資料轉換為布爾值,之後在進行取反。

console.log(!false); // true
console.log(!0);     // true      

遵循:

  • 如果操作數是對象,則傳回 false。
  • 如果操作數是空字元串,則傳回 true。
  • 如果操作數是非空字元串,則傳回 false。
  • 如果操作數是數值 0,則傳回 true。
  • 如果操作數是非 0 數值(包括 Infinity),則傳回 false。
  • 如果操作數是 null,則傳回 true。
  • 如果操作數是 NaN,則傳回 true。
  • 如果操作數是 undefined,則傳回 true。

2 &&(邏輯與)

邏輯與操作符可用于任何類型的操作數,不限于布爾值。規則同真則真,有假則假

let result = true && false;      

針對都是布爾值,遵循兩個都是true,則為true,有一個為false,則為false,如果兩個都是false,則為false。

如果不止布爾值,則遵循:

  • 如果第一個操作數是對象,則傳回第二個操作數。
  • 如果第二個操作數是對象,則隻有第一個操作數求值為 true 才會傳回該對象。
  • 如果兩個操作數都是對象,則傳回第二個操作數。
  • 如果有一個操作數是 null,則傳回 null。
  • 如果有一個操作數是 NaN,則傳回 NaN。
  • 如果有一個操作數是 undefined,則傳回 undefined。
console.log({} && null);             //null
console.log(null && {});             //null
console.log({} && undefined)         //undefined
console.log(undefined && {});        //undefined
console.log({} && NaN);              //NaN
console.log(NaN && {});              //NaN      

3 ||(邏輯或)

與邏輯與一樣,可用于任何類型的操作數,不限于布爾值。同假則假,有真則真

let result = true || false;      

針對都是布爾值,遵循兩個都是true,則為true,有一個為true,則為ture,如果兩個都是false,則為false。

  • 如果第一個操作數是對象,則傳回第一個操作數。
  • 如果第一個操作數求值為 false,則傳回第二個操作數。
  • 如果兩個操作數都是對象,則傳回第一個操作數。
  • 如果兩個操作數都是 null,則傳回 null。
  • 如果兩個操作數都是 NaN,則傳回 NaN。
  • 如果兩個操作數都是 undefined,則傳回 undefined。
console.log({} || null);             //{}
console.log(null || {});             //{}
console.log({} || undefined)         //{}
console.log(undefined || {});        //{}
console.log({} || NaN);              //{}
console.log(NaN || {});              //{}