1. 程式人生 > 實用技巧 >Javascript高階之操作符

Javascript高階之操作符

操作符

一元操作符

  • 概念
    • 只操作一個值的操作符叫一元操作符
    • 一元運算會直接修改原始變數的資料

遞增/遞減操作符

  • 字首操作運算

    • 字首++ 先加1,後參與運算
    • 字首-- 先減1,後參與運算
    • 無論使用字首遞增還是字首遞減操作符,變數的值都會在語句被求值之前改變
    • 在電腦科學中,這通常被稱為具有副作用
  • 字尾操作運算

    • 字尾++ 先參與運算,後加1
    • 字尾-- 先參與運算,後減1

一元加和減

  • 一元加
    • 對數值沒有任何影響
    • 一元加應用到非數值,則會執行與使用Number()轉型函式一樣的型別轉換
let s1= '01',
    s2= '1.1',
    s3= 'z',
    b= false,
    f= 1.1,
    o= {
      valueOf(){
        return -1;
      }
    };

console.log(+s1);
console.log(+s2);
console.log(+s3);
console.log(+b);
console.log(+f);
console.log(+o);
  • 一元減
    • 用於把數值變為負值
    • 一元減應用到非數值,會遵循一元加的規則,再取負值
let s1= '01',
    s2= '1.1',
    s3= 'z',
    b= false,
    f= 1.1,
    o= {
      valueOf(){
        return -1;
      }
    };

console.log(-s1);
console.log(-s2);
console.log(-s3);
console.log(-b);
console.log(-f);
console.log(-o);

布林操作符

  • 邏輯非

    • 邏輯非操作首先將運算元轉換為布林值,再對其取反
    • 邏輯非操作符可以用於把任何值轉換為布林值
  • 邏輯與

    • 邏輯與操作符可用於任何型別的運算元,不限於布林值
    • 如果運算元不是布林值,則邏輯與並不一定會返回布林值
      • 如果第一個運算元是物件,則返回第二個運算元
      • 如果第二個運算元是物件,則只有第一個運算元求值為true才會返回該物件
      • 如果兩個運算元都是物件,則返回第二個運算元
      • 如果有一個運算元是null,則返回null
      • 如果有一個運算元是NaN,則返回NaN
      • 如果有一個運算元是undefined,則返回undefined
let res= {'name':'Sunny'} && 'Jerry';
console.log(res);     // Jerry

let res= 'Jerry' && {'name':'Sunny'};
console.log(res);    // { name: 'Sunny' }

let res= {'name':'Jerry'} && {'name':'Sunny'};
console.log(res);   // { name: 'Sunny' }

let res= {'name':'Jerry'} && null;
console.log(res);   // null

let res= {'name':'Jerry'} && NaN;
console.log(res);   // NaN

let res= {'name':'Jerry'} && undefined;
console.log(res);   // undefined
  • 邏輯或
    • 如果運算元不是布林值,則邏輯或並不一定會返回布林值
      • 如果第一個運算元是物件,則返回第一個運算元
      • 如果第一個運算元求值為false,則返回第二個運算元
      • 如果兩個運算元都是物件,則返回第一個運算元
      • 如果兩個運算元都是null,則返回null
      • 如果兩個運算元都是NaN,則返回NaN
      • 如果兩個運算元都是undefined,則返回undefined
let res= {'name':'Sunny'} || 'Jerry';
console.log(res);     // { name: 'Sunny' }

let res= '' || {'name':'Sunny'};
console.log(res);    // { name: 'Sunny' }

let res= {'name':'Jerry'} || {'name':'Sunny'};
console.log(res);   // { name: 'Jerry' }

let res= null || null;
console.log(res);   // null

let res= NaN || NaN;
console.log(res);   // NaN

let res= undefined || undefined;
console.log(res);   // undefined

短路現象

  • 邏輯與

    • 如果第一個運算元決定了結果,那麼不會對第二個運算元求值
    • 第一個運算元為false,第二個運算元不作為
  • 邏輯或

    • 如果第一個運算元決定了結果,那麼不會對第二個運算元求值
    • 第一個運算元為true,第二個運算元不作為
  • 邏輯或的短路應用

    • let obj= preObj || bacObj
    • 如果首選物件不為空,則返回首選物件,被選物件不作為

乘性操作符

  • 分類
    • 乘法操作符
    • 除法操作符
    • 取模操作符

指數操作符

  • 指數操作符的表現形式
    • Math.pow()
    • **
const num= 4;

console.log(num**2);                // 16
console.log(Math.pow(num, 2));      // 16

console.log(num**0.5);              // 2
console.log(Math.pow(num, 0.5));    // 2

加性操作符

  • 分類
    • 加法操作符
    • 減法操作符

關係操作符

相等操作符

  • 分類
    • 等於和不等於:只進行值得比較
    • 全等和不全等:型別和值同時相等,則相等

條件操作符

let max= (num1>num2)?num1:num2;

賦值操作符

逗號操作符

  • 概念
    • 逗號操作符可以用來在一條語句中執行多個操作
    • 在賦值時使用逗號操作符分隔值,最終會返回表示式中最後一個值
let num= (1, 2, 3, 4, 5);
console.log(num);    // 5

操作符優先順序

  • 優先順序從高到底
    • 括號 ()
    • 一元運算子 ++ -- !
    • 乘性運算子 * / %
    • 加性運算子 + -
    • 關係運算符 > >= < <=
    • 相等運算子 == != === !==
    • 邏輯運算子 先&& 後||
    • 賦值運算子