04-JavaScript基礎-運算符操作

文章配套視頻

進制表示

  • 在JS中可以表示不同進制的數(shù)字(得看瀏覽器支持):
    • 16進制的數(shù)字,則需要以0x開頭
         num = 0x18;
         num = 0xcf;
         num = 0xAacf;
      
    • 8進制的數(shù)字推掸,則需要以0開頭
      num = 016;
      
    • 2進制的數(shù)字桶蝎,則需要以0b開頭
      num = 0b1010;
      
  • 注意:
    • "010"這種字符串,有些瀏覽器會當成8進制解析谅畅,有些會當成10進制解析
    • 可以在parseInt()或parseFloat中傳遞一個第二個參數(shù)登渣,來指定數(shù)字的進制
      str = "070";
      // str= parseInt(str,10);
      str = Number(str);       
      console.log(typeof str);
      console.log(str);
      

運算符

  • 基本定義

    • 運算符也叫操作符, 通過運算符可以對一個或多個值進行運算,并獲取運算結(jié)果, 比如:typeof就是運算符,可以來獲得一個值的類型, 它會將該值的類型以字符串的形式返回: number string boolean undefined object
  • 作用

    • 運算符是告訴程序執(zhí)行特定算術或邏輯操作的符號, 例如告訴程序, 某兩個數(shù)相加, 相減等
  • 分類

    • 按照功能劃分: 算術運算符, 位運算符, 關系運算符, 邏輯運算符
    • 按照操作數(shù)個數(shù)劃分:
      單目運算(只有一個操作數(shù) 如 : i++ !),
      雙目運算(有兩個操作數(shù) 如 : a+b;),
      三目運算(三目運算也稱為問號表達式 a>b ? 1 : 0;)
  • 運算符的結(jié)合性

    • JavaScript中各種運算符的結(jié)合性分為兩種: 左結(jié)合性(自左至右) 和 右結(jié)合性(自右至左)

    • 自左至右,即先左后右
      例如表達式: x - y + z;
      則y 應先與“-”號結(jié)合,執(zhí)行 x-y 運算,然后再執(zhí)行+z 的運算毡泻。
      這種自左至右的結(jié)合 方向就稱為“左結(jié)合性”胜茧。

    • 自右至左,即先右后左
      例如:如x = y = z = 10
      由于“=”的 右結(jié)合性,應先執(zhí)行z = 10; 再執(zhí)行y = z 再執(zhí)行x = y運算。

算術運算符

  • 加法運算


    加法運算
  • 減法運算


    減法運算
  • 乘法運算


    乘法運算
  • 除法運算


    除法運算
  • 取余運算


    取余運算

一元運算符

  • 只需要一個操作數(shù)

  • + 正號不會對數(shù)字產(chǎn)生任何影響

       var num = 123;
        num = +num;
       console.log(num); // 123
    

    對于非Number類型的值,會將先轉(zhuǎn)換為Number仇味,然后再運算

       var bool = true;
       var res = +bool;
       console.log(res); // 1
    
       var str = "123";
       res = +str;
       console.log(res); // 123
    
       var str2 = "123abc";
       res = +str2;
       console.log(res); // NaN, 所以內(nèi)部不是調(diào)用parseInt, 而是Number()函數(shù)
    
       var temp = null;
       res = +temp;
       console.log(res); // 0  
    
  • - 負號可以對數(shù)字進行負號的取反

  var num = 456;
  num = -num;
  console.log(num); // -456

  var result = 1 + -"2" + 3;
  console.log("result = "+result);

賦值運算符

  • 簡單賦值運算符 =
    • 格式: 變量 = 數(shù)據(jù)
    // 將等號右邊的常量100賦值給左邊的變量num
    var num = 100;
    
    // 將等號右邊的變量num中存儲的值賦值給左邊的變量value
    var value = num; 
    
    • 賦值運算符左邊只能是變量
    110 = 220; // 錯誤寫法
    var str = 110;
    220 = str; // 錯誤寫法
    
    • 多個賦值運算符可以組成 賦值表達式, 賦值表達式具備右結(jié)合性
    // 從右至左計算
    //  先將10賦值給變量c, 然后將變量c中存儲的值賦值給變量b
    // 然后將變量b中存儲的值賦值給變量a, 最后a,b,c存儲的都是10
    a = b = c = 10;    
    
  • 復合賦值運算符
  += 加后賦值 變量+=表達式 如:a+=1;即a=a+1
  -= 減后賦值 變量-=表達式 如:a-=1;即a=a-1
  *= 乘后賦值 變量=表達式 如:a=1;即a=a*1
  /= 除后賦值 變量/=表達式 如:a/=1;即a=a/1
  %= 取模后賦值 變量%=表達式 如:a%=1;即a=a%1
  • 復合賦值表達式運算
    • 格式: 變量 復合賦值運算符 表達式; 如: a *= 1 + 2;
    • 由于賦值運算符是右結(jié)合性, 所以會先計算等號右邊, 然后再進行復合運算
       var value = 5;
       value *= 2 - 2; // 等價于  value = 5 * (2 - 2);
       console.log(value); // 0
    

自增/自減運算符

  • 自增呻顽、自減運算符介紹

    • 在程序設計中,經(jīng)常遇到“i=i+1”和“i=i-1”這兩種極為常用的操作。
    • JavaScript語言為這種操作提供了兩個更為簡潔的運算符,即++和--,分別叫做自增運算符和自減運算符丹墨。
  • 自增芬位、自減運算符求值過程

    • 無論運算符號在前還是在后, 變量在自身基礎上都會改變
       var num = 1;
       num++; // 等價于 num = num + 1;
       console.log(num); // 2
    
       num = 1;
       ++num;
       console.log(num); // 2
    
       num = 1;
       num--; // 等價于 num = num - 1;
       console.log(num); // 0
    
       num = 1;
       --num;
      console.log(num); // 0
    
    • 后綴表達式:x++, x--; 先用x的當前值作為表達式的值,再進行自增自減1運算。即“先用 后變”,也就是先用變量的值參與運算,變量的值再進行自增自減變化带到。
       var a, b;
       a = 20;
       b = 30;
       // ++ 在后, 變量先參與其它運算, 然后再自增
      var res = (a++) + (b++);
      console.log(res); // 50
    
       a = 10;
       b = 20;
       // -- 在后, 變量先參與其它運算, 然后再自減
       res = (a--) + (b--);
       console.log(res); // 30
       console.log(a); // 9
       console.log(b); // 19
    
    • 前綴表達式:++x, --x; 其中x表示變量名,先完成變量的自增自減1運算,再用x的值作為表 達式的值;即“先變后用”,也就是變量的值先變,再用變量的值參與運算昧碉。
     var a, b;
     a = 10;
     b = 20;
     // ++ 在前, 變量先自增, 然后再參與其它運算
     res = (++a) + (++b);
     console.log(res); // 32
     console.log(a); // 11
     console.log(b); // 21
    
      a = 10;
      b = 20;
      // ++ 在前, 變量先自增, 然后再參與其它運算
      res = (--a) + (--b);
      console.log(res); // 28
      console.log(a); // 9
      console.log(b); // 19
    

邏輯運算符

  • 使用目的

    • 有時候英染,我們需要在多個條件同時成立的時候才能執(zhí)行某段代碼
    • 比如:用戶只有同時輸入了QQ和密碼,才能執(zhí)行登錄代碼被饿,如果只輸入了QQ或者只輸入了密碼四康,就不能執(zhí)行登錄代碼。這種情況下狭握,我們就要借助于JavaScript提供的邏輯運算符闪金。
  • &&(與運算)

    • 格式: 條件A && 條件B
    • 運算結(jié)果
      只有當條件A和條件B都成立時,結(jié)果才為true论颅;其余情況的結(jié)果都為false哎垦。因此,條件A或條件B只要有一個不成立恃疯,結(jié)果都為false
      口訣:一假則假
    • 邏輯與運算過程
      • 總是先判斷條件A是否成立;
      • 如果條件A成立漏设,接著再判斷條件B是否成立:如果條件B成立,“條件A && 條件B”的結(jié)果就為true今妄,如果條件B不成立郑口,結(jié)果就為false;
      • 如果條件A不成立,就不會再去判斷條件B是否成立:因為條件A已經(jīng)不成立了盾鳞,不管條件B如何結(jié)果肯定是false;
      • 如果兩個值都是true則返回true;
        var result = true && true;
        //只要有一個false犬性,就返回false
        result = true && false;
        result = false && true;
        result = false && false;
        
    • 短路測試
        //第一個值為true,會檢查第二個值
       true && alert("我來了L诮觥乒裆!");
    
        //第一個值為false,不會檢查第二個值
       false && alert("我沒有來M评缸兔!");
    
    • 注意點
      對于非Boolean類型的數(shù)值, 邏輯與會自動將其轉(zhuǎn)換為Boolean類型來判斷
      如果條件A不成立, 則返回條件A的數(shù)值本身
      如果條件A成立, 不管條件B成不成立都返回條件B數(shù)值本身
          var result =  "123" && "abc";
          console.log(result); // "abc"
          result =  "123" && 0;
          console.log(result); // 0
          result =  null && 0;
          console.log(result); // null
    
  • ||(或運算)


    或運算
    • 注意點
      對于非Boolean類型的數(shù)值, 邏輯或自動會將其轉(zhuǎn)換為Boolean類型來判斷
      如果條件A不成立, 則不管條件B成不成立都返回條件B數(shù)值本身
      如果條件A成立, 則返回條件A的數(shù)值本身
      var  result =  null || 0;
      console.log(result); // 0
       
      result =  "123" || "abc";
      console.log(result); // "123"
      result =  "123" || 0;
      console.log(result); // "123"
    
  • !(非運算)

    非運算

關系運算符

  • 關系運算符存在的意義

    • 默認情況下,我們在程序中寫的每一句正確代碼都會被執(zhí)行吹艇。但很多時候惰蜜,我們想在某個條件成立的情況下才執(zhí)行某一段代碼
    • 這種情況的話可以使用條件語句來完成,但是學習條件語句之前受神,我們先來看一些更基礎的知識:如何判斷一個條件成不成立抛猖。
  • JavaScript中的真假性

    • 在JavaScript中,條件成立稱為“真”鼻听,條件不成立稱為“假”财著,因此,判斷條件是否成立就是判斷條件的“真假”撑碴。
    • 在JavaScript已經(jīng)給我們定義好了一個Boolean類型的值, 取值是true和false, true代表真, false代表假
    • 而接下來我們要學習的關系運算符它的返回值正好就是Boolean類型的值, 也就是說關系運算符的返回值要么是true,要么是false
  • 圖示


    關系運算符
  • 示例

   var a, b;
   a = 20;
   b = 20;
   console.log(a > b); // false
   console.log(a < b); // false
   console.log(a >= b); // true
   console.log(a <= b); // true
   console.log(a == b); // true
   console.log(a != b); // false
  • 對于非數(shù)值進行比較時撑教,會將其轉(zhuǎn)換為數(shù)值然后在比較
console.log(1 > true);
console.log(1 >= false);
console.log(1 > "0"); 
console.log(1 > null);
console.log(1 > true); //false
console.log(1 >= false); //true
console.log(1 > "0"); //true
console.log(1 > null); //true
  • 如果符號兩側(cè)的值都是字符串時,不會將其轉(zhuǎn)換為數(shù)字進行比較, 而會分別比較字符串中字符的Unicode編碼
    • 比較字符編碼時是一位一位進行比較
    • 如果兩位一樣醉拓,則比較下一位伟姐,所以借用它來對英文進行排序
    • 比較中文時沒有意義
    • 測試
      console.log("a" < "b");
      console.log("abc" < "abd");
      console.log("你" > "我"); 
      
  • null收苏、undefined 、NaN比較
console.log(null == 0); // false
console.log(undefined == 0); // false
// 永遠不要判斷兩個NaN是否相等
console.log(NaN == NaN); // false

/*
 * 可以通過isNaN()函數(shù)來判斷一個值是否是NaN
 *    如果該值是NaN則返回true愤兵,否則返回false
 */
var num = NaN;
console.log(isNaN(num)); // true

// undefined 衍生自 null, 所以返回true
console.log(null == undefined); // true;
console.log(null === undefined); // false;

// == 判斷值是否相等
// == 會進行數(shù)據(jù)類型轉(zhuǎn)換
console.log("123" == 123); // true
// === 判斷值和類型時候同時相等
// === 不會進行數(shù)據(jù)類型轉(zhuǎn)換
console.log("123" === 123); // false     
  • 注意
    • 比較兩個字符串型的數(shù)字鹿霸,可能會得到不可預期的結(jié)果
    • 所以, 在比較兩個字符串型的數(shù)字時,一定要轉(zhuǎn)型
    • console.log("1111123" < "124");

逗號運算符

  • 在JavaScript中逗號“,”也是一種運算符,稱為逗號運算符秆乳。 其功能是把多個表達式連接起來組成一個表達式, 稱為逗號表達式懦鼠。

    • 一般形式形式: 表達式1,表達式2屹堰,… …肛冶,表達式n;
    • 例如: a = 1 + 1,b = 3 * 4, c = 10 / 2;
  • 求值過程

    • 表達式1,表達式2扯键,… …睦袖,表達式n;
    • 逗號表達式的運算過程是:先算表達式1,再算表達式2忧陪,依次算到表達式n
    • 整個逗號表達式的值是最后一個表達式的值
    • 案例
        var a, b, c, d;
         /*
        1.先計算表達式1, a = 2
        2.再計算表達式2, b = 12
       3.再計算表達式3, c = 5
        4.將表達式3的結(jié)果返回給d
        */
       d = (a = 1 + 1,b = 3 * 4, c = 10 / 2);
       console.log(d); // 5
      
  • 使用注意

    • 程序中使用逗號表達式, 通常是要分別求逗號表達式內(nèi)各表達式的值,并不一定要求整個逗號表達式的值。
    • 并不是在所有出現(xiàn)逗號的地方都組成逗號表達式,例如在變量說明中,函數(shù)參數(shù)表中逗號只是用作各變量之間的間隔符近范。
        var a, b, c;  //這里的逗號只是分隔符
        function sendMessage(num, content) { //這里的逗號只是分隔符
               console.log(num, content);
        }
        ``` 
    

三目運算符(條件運算符)

  • 格式: 條件表達式 ? 語句1 : 語句2;
  • 求值規(guī)則
    如果條件表達式為true嘶摊,則執(zhí)行語句1,并返回執(zhí)行結(jié)果
    如果條件表達式為false评矩,則執(zhí)行語句2叶堆,并返回執(zhí)行結(jié)果
    // 彈第一個
    true?alert("語句1") : alert("語句2");
    // 彈第二個
    false?alert("語句1") : alert("語句2");
    
  • 注意點
    • 條件運算符?和:是一對運算符,不能分開單獨使用
    • 如果條件的表達式的求值結(jié)果是一個非布爾值, 會將其轉(zhuǎn)換為布爾值然后在運算
     // 彈第二個
     null?alert("語句1") : alert("語句2");
     // 彈第一個
     "abc"?alert("語句1") : alert("語句2");
    

運算符的優(yōu)先級

  • 優(yōu)先級
    • JavaScript中,運算符的運算優(yōu)先級共分為15 級。1 級最高,15 級最低斥杜。
    • 在表達式中,優(yōu)先級較高的先于優(yōu)先級較低的進行運算虱颗。
      先計算優(yōu)先級高的
      優(yōu)先級相同則左結(jié)合計算
      可以使用()來改變優(yōu)先級
  • 圖示


    運算符的優(yōu)先級

練習

  • 用戶從鍵盤輸入3個整數(shù), 找到最大值并輸出?
    // 1.定義3個變量, 接收用戶輸入的值
    var num1, num2, num3, max;

    // 2.利用prompt()接收用戶輸入的值
    num1 = Number(prompt('請輸入第一個數(shù):'));
    num2 = +(prompt('請輸入第二個數(shù):'));
    num3 = +(prompt('請輸入第三個數(shù):'));

    // 3. 定義變量保存最大值
    // var max;

    // 4. 利用三目運算符進行兩兩比較
    /*max = num1 > num2 ? num1 : num2;
    max = max > num3 ? max : num3;*/
    // 不推薦
    max = (num1 > num2 ? num1 : num2) > num3 ? (num1 > num2 ? num1 : num2) : num3;

    // 5. 輸出結(jié)果
    alert(max);

學習建議

  • 多敲代碼, 可結(jié)合視頻一起觀看, 不清楚的加我微信yejh9522溝通交流就好!
最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市蔗喂,隨后出現(xiàn)的幾起案子忘渔,更是在濱河造成了極大的恐慌,老刑警劉巖缰儿,帶你破解...
    沈念sama閱讀 218,682評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件畦粮,死亡現(xiàn)場離奇詭異,居然都是意外死亡乖阵,警方通過查閱死者的電腦和手機宣赔,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,277評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來瞪浸,“玉大人儒将,你說我怎么就攤上這事《云眩” “怎么了钩蚊?”我有些...
    開封第一講書人閱讀 165,083評論 0 355
  • 文/不壞的土叔 我叫張陵贡翘,是天一觀的道長。 經(jīng)常有香客問我两疚,道長床估,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,763評論 1 295
  • 正文 為了忘掉前任诱渤,我火速辦了婚禮丐巫,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘勺美。我一直安慰自己递胧,他們只是感情好,可當我...
    茶點故事閱讀 67,785評論 6 392
  • 文/花漫 我一把揭開白布赡茸。 她就那樣靜靜地躺著缎脾,像睡著了一般。 火紅的嫁衣襯著肌膚如雪占卧。 梳的紋絲不亂的頭發(fā)上遗菠,一...
    開封第一講書人閱讀 51,624評論 1 305
  • 那天,我揣著相機與錄音华蜒,去河邊找鬼辙纬。 笑死,一個胖子當著我的面吹牛叭喜,可吹牛的內(nèi)容都是我干的贺拣。 我是一名探鬼主播,決...
    沈念sama閱讀 40,358評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼捂蕴,長吁一口氣:“原來是場噩夢啊……” “哼譬涡!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起啥辨,我...
    開封第一講書人閱讀 39,261評論 0 276
  • 序言:老撾萬榮一對情侶失蹤涡匀,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后溉知,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體渊跋,經(jīng)...
    沈念sama閱讀 45,722評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年着倾,在試婚紗的時候發(fā)現(xiàn)自己被綠了拾酝。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,030評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡卡者,死狀恐怖蒿囤,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情崇决,我是刑警寧澤材诽,帶...
    沈念sama閱讀 35,737評論 5 346
  • 正文 年R本政府宣布底挫,位于F島的核電站,受9級特大地震影響脸侥,放射性物質(zhì)發(fā)生泄漏建邓。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,360評論 3 330
  • 文/蒙蒙 一睁枕、第九天 我趴在偏房一處隱蔽的房頂上張望官边。 院中可真熱鬧,春花似錦外遇、人聲如沸注簿。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,941評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽诡渴。三九已至,卻和暖如春菲语,著一層夾襖步出監(jiān)牢的瞬間妄辩,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,057評論 1 270
  • 我被黑心中介騙來泰國打工山上, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留眼耀,地道東北人。 一個月前我還...
    沈念sama閱讀 48,237評論 3 371
  • 正文 我出身青樓胶哲,卻偏偏與公主長得像畔塔,于是被迫代替她去往敵國和親潭辈。 傳聞我的和親對象是個殘疾皇子鸯屿,可洞房花燭夜當晚...
    茶點故事閱讀 44,976評論 2 355