1. 程式人生 > 其它 >js中的運算子

js中的運算子

技術標籤:javascriptjs

文章目錄

運算子

1.運算子概念

運算元 :運算子應用物件。
如:1 + 2 = 3,這裡面的1,2就屬於運算元。

一元運算子:只有一個運算元的運算子。
//一元運算子
 var a = -1;
     a = -a;

表示式:由運算子和變數/常量組成的式子。

eg: a+1 1+2 3+5 5-4 a-b c*d

2.數學運算子

常見的數學運算子:+ - * /
1.% 指數:**

多個數字和字元相加時,注意順序不同,結果也會不同

var a =  3 + 4 +'5' ;  //結果: 75。
var a = '3' + 4 + 5 ;//結果:345。

2.餘數運算子%
返回前一個運算雲被後一個運算元除之後得到的餘數。

5%2=1  5/2=2...1

【注】運算結果的正負號是由第一個運算元的正負號決定的。
3.指數運算子: **
2**4 2的四次方
平常運算子:左結合
指數運算子:右結合

4.數值運算子,負數值運算子
+ -
作用在string與其他資料型別上時 是拼接
作用在兩個數值上時,是相加
作用在一個數值上時 是正負運算。如果該資料型別不是數值,會自動轉換為數值。
a=-1;
a=+a;

3.一元運算子

只作用在一個運算元上的運算子叫做一元運算子。

++ –
a++
先返回a的值,然後在對a進行+1運算。

var a = 10;
console.log(a++);
//注:輸出值還是10,a++表示輸出完才會進行運算。

++a
先對a進行+1運算 再返回a的值。

 var a = 10;
 console.log(++a)//注:++在前為先運算後輸出,結果為11。

a- -
先返回a的值,然後在對a進行-1運算。

var a = 10;
console.log(a--);
//注:先輸出後運算,輸出結果為10

–a
先對a進行-1運算 再返回a的值。

var a = 10;
console.log(--a);
//注:先運算後輸出,結果為9.

4.賦值運算子

賦值運算子 右結合
基本:= 將右邊的值賦值給左邊的變數
複合:+= -= *=

 var a=1;
 a+=3;//a=a+3;
 a-=2;//a=a-2;
 console.log(a);

5.關係運算符

    >       大於
    <       小於
    ==      相等
    ===     嚴格相等
    !=      不等
    !==     嚴格不相等
    <=      小於等於
    >=      大於等於

1 比較結果為boolean型別。
2 字串比較:
會使用字典(ASCII碼值)的順序進行判斷的.

  • 首先比較首字元大小。
  • 如果一方字元較大(較小),則該字元大於(小於)另外一個字元,演算法結束。
  • 兩個字串的首字元相等,那麼取下一位字元進行比較。
  • 重複以上步驟,直到演算法結束或所有字元比較完成。
  • 若所有字元比較完成,且都相等,則兩個字元相等。

3 不同型別的比較

  • 字串與數字比較時,若字串不能轉為數字,轉換結果為NaN, 比較結果為false。
  • 相等比較的問題:不能區分0和false,空字串等的區別。
  • 嚴格相等運算子,不會進行型別的自動轉換,若型別不同,直接返回false。型別相等,再進行比較。

4 對特殊值 null 和 undefined的比較

  • null和undefined與其他任何值比較都是false。
  • null與undefined 非嚴格相等時,返回true,嚴格相等比較時,返回false。
  • 對變數進行null,undefined判斷時,儘量使用嚴格相等

6.邏輯運算子

取反運算子:!
與運算:&&
或運算:||

1.取反運算子

  • 用於將布林值變為它的相反數。true=>false false=>true;
var a = 0;
console.log(!a);
//輸出值為true

2.&&

  • 往往用於多個表示式的求值。
  • 左右兩邊的布林值為true,結果的布林值為true 若其中一個為false,結果的布林值為false;
  • 運算規則:
    1.第一個運算元的布林值為true時,返回第二個運算元的值。(不是布林值)。
 var a = 1, b = 2;
 console.log(a&&b);
// a為true,返回第二個元素的值。

2.第一個運算元的布林值為false時,返回第一個運算元的值。不會執行第二個表示式。

    var a = 0, b = 2;
    console.log(a&&b)//a為false,返回第一個運算的值0.
  • &&可以連用,返回第一個布林值為false的表示式的值。如果所有的表示式的布林值都為true,返回最後一個表示式的值。
    var a = 1, b = 2,c = 3;
    console.log(a&&b&&c);
//表示式的布林值都為true,返回最後一個表示式的值,輸出結果為3.

    var a = 1, b = 0,c = 3;
    console.log(a&&b&&c);
    
//b的布林值為false,返回第一個布林值為false的值,輸出結果為0.

3.||

  • 左右兩邊的布林值只要有一個為true,結果的布林值就為true。只有兩邊的布林值都為false時,結果的布林值才為false。
  • 運算規則:

1.第一個運算元的布林值為true時,返回第一個運算元的值。不會執行第二個表示式。

    var a = 1,b = 2;
    console.log(a||b);
//a的值為true,返回第一個運算元的值,輸出結果為:1

2.第一個運算元的布林值為false時,返回第二個運算元的值。

    var a = 0,b = 2;
    console.log(a||b);
    
//第一個運算元的布林值為false,返回第二個運算元的值,輸出結果為:2

4.&& 與 || 都有短路的效果。

var a = true;
    var b = 1;
    false&&++b;
    console.log(b);
    
//b的輸出結果為1,發生了短路
var a = true;
    var b = 1;
    a||++b;
    console.log(b);
 //b的輸出的結果唯一,發生了短路。

三元運算子

  • 語法:表示式1?表示式2:表示式3
month<10?"0"+month:month;
  • 表示式1是一個條件,值是boolean型別的。
  month<10?"0"+month:month;
 //表示式month<10,它輸出的結果就只有trule和false,不會為其他的型別的值。
  • 若表示式1的值為true,則執行表示式2的操作,並返回表示式2的結果。
var month = 9;
month = month<10?"0"+month:month;
console.log(month);
//month	值為9,表示式1為true,返回表示式2,輸出結果為:09。
  • 若表示式1的值為false,則執行表示式3的操作,並返回表示式3的結果。
    var month = 11;
    month = month<10?"0"+month:month;
    console.log(month);
    
//month  值為11,表示式1值為false,返回表示式3的結果,輸出結果為:11	
var year = "2021";
        var month = "1";
        var day = "1";
        month = month<10?"0"+month:month;//month<10,執行"0"+ month,month>10,執行month的值。
        day = day<10?"0"+day:day;//day<10,執行"0"+day,month>10,執day的值。
        console.log("後天是:"+year+month+day);

在這裡插入圖片描述

優先順序

±*/ 先乘除後加減
()優先順序最高
= 賦值運算子的優先順序最低
一元運算子
*、/、%
+、-
<= >=
== != === !==
&
&&
?:
複合賦值 += -=
賦值 =
&& 與 &
&&有短路效果,而&是沒有短路效果

 var a = true;
    var b = 1;
    a&++b;
    console.log(b,a)    
//  & 沒有短路效果所以兩個表示式都會生效,輸出結果為 2 true 

    var a = false;
    var b = 1;
    a&++b;
    console.log(b,a);
    
//輸出結果為  2  false ;