05-JavaScript運(yùn)算符

運(yùn)算符基本概念

  • JavaScript運(yùn)算符的概念和C語言一樣, 都是告訴程序執(zhí)行特定算術(shù)或邏輯操作的符號。

運(yùn)算符分類

  • JavaScript運(yùn)算符的分類和C語言也一樣

  • 按照功能劃分:

    • 算術(shù)運(yùn)算符
    • 位運(yùn)算符
    • 關(guān)系運(yùn)算符
    • 邏輯運(yùn)算符
  • 運(yùn)算符根據(jù)參與運(yùn)算的操作數(shù)的個數(shù)分為

    • 單目運(yùn)算
    • 雙目運(yùn)算
    • 三目運(yùn)算

運(yùn)算符的優(yōu)先級和結(jié)合性

  • 優(yōu)先級
    • JavaScript運(yùn)算符的優(yōu)先級和C語言也一樣
    • JavaScript中,運(yùn)算符的運(yùn)算優(yōu)先級共分為15 級拉背。1 級最高,15 級最低。
    • 在表達(dá)式中,優(yōu)先級較高的先于優(yōu)先級較低的進(jìn)行運(yùn)算默终。
    • 在一個運(yùn)算量兩側(cè)的運(yùn)算符優(yōu)先級相同時,則按運(yùn)算符的結(jié)合性所規(guī)定的結(jié)合方向處理
運(yùn)算符 描述
() 表達(dá)式分組
++ -- - ~ ! 一元運(yùn)算符
* / % 乘法椅棺、除法犁罩、取模
+ - + 加法、減法两疚、字符串連接
<< >> >>> 移位
< <= > >= 小于床估、小于等于、大于诱渤、大于等于
== != === !== 等于丐巫、不等于、嚴(yán)格相等勺美、非嚴(yán)格相等
& 按位與
^ 按位異或
| 按位或
&& 邏輯與
|| 邏輯或
?: 條件
= += -= *= /= %= 賦值運(yùn)算
, 多重求值
  • 結(jié)合性
    • JavaScript運(yùn)算符的結(jié)合性和C語言也一樣
    • 即左結(jié)合性(自左至右)和右結(jié)合性(自右至左)递胧。

算術(shù)運(yùn)算符

  • JavaScript算術(shù)運(yùn)算符和C語言也一樣
名稱 符號 說明
加法運(yùn)算符 + 對兩個值進(jìn)行加法運(yùn)算,并將結(jié)果返回
減法運(yùn)算符 - 對兩個值進(jìn)行減法運(yùn)算赡茸,并將結(jié)果返回
乘法運(yùn)算符 * 對兩個值進(jìn)行乘法運(yùn)算缎脾,并將結(jié)果返回
除法運(yùn)算符 / 對兩個值進(jìn)行除法運(yùn)算,并將結(jié)果返回
求余運(yùn)算符 (模運(yùn)算符) % 對兩個值進(jìn)行取余運(yùn)算占卧,并將結(jié)果返回
  • 基本使用和C語言一模一樣
        var res1 = 1 + 1;
        var res2 = 1 - 1;
        var res3 = 2 * 2;
        var res4 = 10 / 3;
        var res5 = 10 % 3;
        console.log(res1); // 1
        console.log(res2); // 0 
        console.log(res3); // 4
        console.log(res4); // 3.3333
        console.log(res5); // 1
    

  • 注意點(diǎn):
    • 和C語言不同的是JavaScript中整數(shù)除以整數(shù)結(jié)果是小數(shù)

          var res4 = 10 / 3;
          console.log(res4); // 3.3333
      
    • 任何值和NaN做運(yùn)算都得NaN

      var result = 2 + NaN;
      console.log(result); //NaN
      
    • 非Number類型的值進(jìn)行運(yùn)算時遗菠,會將這些值轉(zhuǎn)換為Number然后在運(yùn)算

      var result = true + 1; // + - * /  %
      console.log(result); // 2
      result = true + false;
      console.log(result); // 1
      result = 2 + null; 
      console.log(result);// 2
      
    • 任何的值和字符串做加法運(yùn)算,都會先轉(zhuǎn)換為字符串华蜒,然后再和字符串做拼串的操作

      var result = 1 + "123";
      console.log(result); // 1123
      result = 2 + "true";
      console.log(result); // 2true
      
    • 任何的值和字符串做- * / %法運(yùn)算, 都會先轉(zhuǎn)換為字符串轉(zhuǎn)換為Number

      var result = 2 - "1"; // - * /  %
      console.log(result); // 1
      result = "2" - "1";
      console.log(result); // 1
      
    • 取余運(yùn)算m%n, n等于0 返回NaN, 其它和C語言一樣

      var result = 10 % 0;
      console.log(result); // NaN
      

正負(fù)運(yùn)算符

    • 正號
    • + 正號不會對數(shù)字產(chǎn)生任何影響
      var num = 123;
      num = +num;
      console.log(num); // 123
      
    • 對于非Number類型的值,會將先轉(zhuǎn)換為Number辙纬,然后再運(yùn)算
      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
      
  • 負(fù)號
    • - 負(fù)號可以對數(shù)字進(jìn)行負(fù)號的取反
      var num = 123;
      num = -num;
      console.log(num); // -123
      

賦值運(yùn)算符

  • JavaScript賦值運(yùn)算符和C語言也一樣
優(yōu)先級 名稱 符號 說明
14 賦值運(yùn)算符 = 雙目運(yùn)算符,具有右結(jié)合性
14 除后賦值運(yùn)算符 /= 雙目運(yùn)算符,具有右結(jié)合性
14 乘后賦值運(yùn)算符 (模運(yùn)算符) *= 雙目運(yùn)算符,具有右結(jié)合性
14 取模后賦值運(yùn)算符 %= 雙目運(yùn)算符,具有右結(jié)合性
14 加后賦值運(yùn)算符 += 雙目運(yùn)算符,具有右結(jié)合性
14 減后賦值運(yùn)算符 -= 雙目運(yùn)算符,具有右結(jié)合性

自增自減運(yùn)算符

  • JavaScript自增自減運(yùn)算符和C語言也一樣
優(yōu)先級 名稱 符號 說明
2 自增運(yùn)算符(在后) i++ 單目運(yùn)算符,具有左結(jié)合性
2 自增運(yùn)算符(在前) ++i 單目運(yùn)算符,具有右結(jié)合性
2 自減運(yùn)算符(在后) i-- 單目運(yùn)算符,具有左結(jié)合性
2 自減運(yùn)算符(在前) --i 單目運(yùn)算符,具有右結(jié)合性

關(guān)系運(yùn)算符

  • JavaScript關(guān)系運(yùn)算符和C語言也一樣
  • 和C語言不同的是, JavaScript中的關(guān)系運(yùn)算符只會返回true或false
優(yōu)先級 名稱 符號 說明
6 大于運(yùn)算符 > 雙目運(yùn)算符,具有左結(jié)合性
6 小于運(yùn)算符 < 雙目運(yùn)算符,具有左結(jié)合性
6 大于等于運(yùn)算符 >= 雙目運(yùn)算符,具有左結(jié)合性
6 小于等于運(yùn)算符 <= 雙目運(yùn)算符,具有左結(jié)合性
7 等于運(yùn)算符 == 雙目運(yùn)算符,具有左結(jié)合性
7 不等于運(yùn)算符 != 雙目運(yùn)算符,具有左結(jié)合性
7 不等于運(yùn)算符 === 雙目運(yùn)算符,具有左結(jié)合性
7 不等于運(yùn)算符 !== 雙目運(yùn)算符,具有左結(jié)合性
  • 注意點(diǎn):
    • 對于非數(shù)值進(jìn)行比較時,會將其轉(zhuǎn)換為數(shù)字然后在比較
      console.log(1 > true); //false
      console.log(1 > false); //true
      console.log(1 > "0"); //true
      console.log(1 > null); //true
      
    • 如果符號兩側(cè)的值都是字符串時叭喜,不會將其轉(zhuǎn)換為數(shù)字進(jìn)行比較, 而會分別比較字符串中字符的Unicode編碼
    • Unicode編碼轉(zhuǎn)換地址
      // a的Unicode編碼是:0061
      // b的Unicode編碼是:0062
      console.log("a" < "b");//true
      
      // 比較多位時則是從前往后一位一位比較
      // 第一位相同比較第二位, 直到比較到不一樣或者結(jié)束為止
      // c的Unicode編碼是:0063
      // 類似于C語言strcmp函數(shù), 只不過JavaScript中比較的是Unicode編碼
      console.log("ab" < "ac");//true
      
    • null贺拣、undefined 、NaN比較
      console.log(null == 0); // false
      console.log(undefined == 0); // false
      // 永遠(yuǎn)不要判斷兩個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;
      
      // == 判斷值是否相等
      // == 會進(jìn)行數(shù)據(jù)類型轉(zhuǎn)換
      console.log("123" == 123); // true
      // === 判斷值和類型時候同時相等
      // === 不會進(jìn)行數(shù)據(jù)類型轉(zhuǎn)換
      console.log("123" === 123); // false
      

邏輯運(yùn)算符

  • JavaScript邏輯運(yùn)算符和C語言也一樣
優(yōu)先級 名稱 符號 說明
2 邏輯非運(yùn)算符 ! 單目運(yùn)算符,具有右結(jié)合性
11 邏輯與運(yùn)算符 && 雙目運(yùn)算符,具有左結(jié)合性
12 邏輯或運(yùn)算符 || 雙目運(yùn)算符,具有左結(jié)合性
  • 注意點(diǎn):
    • 對于非Boolean類型的數(shù)值, 邏輯運(yùn)算符會將其悄悄咪咪轉(zhuǎn)換為Boolean類型來判斷

    • 邏輯與

      • 如果條件A不成立, 則返回條件A的數(shù)值本身
      • 如果條件A成立, 不管條件B成不成立都返回條件B數(shù)值本身
      result =  null && 0;
      console.log(result); // null
      var result =  "123" && "abc";
      console.log(result); // "abc"
      result =  "123" && 0;
      console.log(result); // 0
      
    • 邏輯或

      • 如果條件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"
      

逗號運(yùn)算符

  • JavaScript逗號運(yùn)算符和C語言也一樣
  • 逗號運(yùn)算符會從左至右依次取出每個表達(dá)式的值, 最后整個逗號表達(dá)式的值等于最后一個表達(dá)式的值
  • 格式: 表達(dá)式1譬涡,表達(dá)式2,… …启绰,表達(dá)式n;
    var a, b, c, d;
    /*
    1.先計算表達(dá)式1, a = 2
    2.再計算表達(dá)式2, b = 12
    3.再計算表達(dá)式3, c = 5
    4.將表達(dá)式3的結(jié)果返回給d
    */
    d = (a = 1 + 1,b = 3 * 4, c = 10 / 2);
    console.log(d); // 5
    

三目運(yùn)算符(條件運(yùn)算符)

  • JavaScript三目運(yùn)算符和C語言也一樣
  • 格式: 條件表達(dá)式 ? 語句1 : 語句2;
    // 彈第一個
    true?alert("語句1") : alert("語句2");
    // 彈第二個
    false?alert("語句1") : alert("語句2");
    
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末昂儒,一起剝皮案震驚了整個濱河市沟使,隨后出現(xiàn)的幾起案子腊嗡,更是在濱河造成了極大的恐慌,老刑警劉巖燕少,帶你破解...
    沈念sama閱讀 206,126評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件客们,死亡現(xiàn)場離奇詭異材诽,居然都是意外死亡脸侥,警方通過查閱死者的電腦和手機(jī)盈厘,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評論 2 382
  • 文/潘曉璐 我一進(jìn)店門沸手,熙熙樓的掌柜王于貴愁眉苦臉地迎上來契吉,“玉大人,你說我怎么就攤上這事塔嬉∽馇模” “怎么了?”我有些...
    開封第一講書人閱讀 152,445評論 0 341
  • 文/不壞的土叔 我叫張陵胶哲,是天一觀的道長鸯屿。 經(jīng)常有香客問我寄摆,道長修赞,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,185評論 1 278
  • 正文 為了忘掉前任勾邦,我火速辦了婚禮眷篇,結(jié)果婚禮上荔泳,老公的妹妹穿的比我還像新娘。我一直安慰自己昧港,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,178評論 5 371
  • 文/花漫 我一把揭開白布确憨。 她就那樣靜靜地躺著休弃,像睡著了一般圈膏。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上丈甸,一...
    開封第一講書人閱讀 48,970評論 1 284
  • 那天睦擂,我揣著相機(jī)與錄音顿仇,去河邊找鬼摆马。 笑死,一個胖子當(dāng)著我的面吹牛囤采,可吹牛的內(nèi)容都是我干的蕉毯。 我是一名探鬼主播,決...
    沈念sama閱讀 38,276評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼缤谎,長吁一口氣:“原來是場噩夢啊……” “哼褐着!你這毒婦竟也來了含蓉?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,927評論 0 259
  • 序言:老撾萬榮一對情侶失蹤斟赚,失蹤者是張志新(化名)和其女友劉穎差油,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體发侵,經(jīng)...
    沈念sama閱讀 43,400評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡刃鳄,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,883評論 2 323
  • 正文 我和宋清朗相戀三年叔锐,在試婚紗的時候發(fā)現(xiàn)自己被綠了愉烙。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片解取。...
    茶點(diǎn)故事閱讀 37,997評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡肮蛹,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出省核,到底是詐尸還是另有隱情昆码,我是刑警寧澤,帶...
    沈念sama閱讀 33,646評論 4 322
  • 正文 年R本政府宣布旧噪,位于F島的核電站淘钟,受9級特大地震影響陪毡,放射性物質(zhì)發(fā)生泄漏勾扭。R本人自食惡果不足惜妙色,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,213評論 3 307
  • 文/蒙蒙 一身辨、第九天 我趴在偏房一處隱蔽的房頂上張望芍碧。 院中可真熱鬧,春花似錦怪瓶、人聲如沸践美。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽绎晃。三九已至杂曲,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間咱揍,已是汗流浹背棚饵。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評論 1 260
  • 我被黑心中介騙來泰國打工噪漾, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人题翰。 一個月前我還...
    沈念sama閱讀 45,423評論 2 352
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親沼填。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,722評論 2 345

推薦閱讀更多精彩內(nèi)容