對于程式設計語言來說,邏輯操作符跟相等操作符幾乎同樣重要。
邏輯操作符一共三個,!(邏輯非)、&&(邏輯與)、||(邏輯或)。
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 || {}); //{}