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 ;