運算符
一元運算符
只能操作一個值的運算符叫做一元運算符
//後取值 先執行運算, 再取值
//前取值 先取值, 再執行運算
前自加:
var x=5;
var num1=++x; // 相當於x=x+1; var num1=x;
console.log('num1='+num1+' x='+x); //num1=6 x=6
後自加:
var x=5;
var num2=x++; // 相當於 var num2=x; x=x+1;
console.log('num2:'+num2+' x:'+x); //num2=5 x=6
前自減:
var x=5;
var num3=--x; //相當於 x=x-1; var num3=x;
console.log('num3='+num3+' x='+x); //num3=4 x=4
後自減
var x=5;
var num4=x--; //相當於 var num4=x; x=x-1;
console.log('num4='+num4+' x='+x); //num4=5 x=4
其他類型應用一元運算符的規則
var b = '89';
b++; //90,數值字符自動轉換成數值
var b= 'ab';
b++; //NaN,字符串包含非數值轉成NaN
var b = false;
b++; //1,false轉成數值0,累加就是1
var b = 2.3;
b++; //3.3,直接加1
賦值運算符
賦值運算符用等於號(=)表示,就是把右邊的值賦給左邊的變量。
複合賦值運算符通過 x=的形式表示,x 表示算術運算符。
如: +=, -=, *=, /=, %=等
= 等於 x=2;
+= 加等於 x+=3; 等同於x=x+3;
-= 減等於 x-=3; 等同於x=x-3;
*= 乘等於 x*=3; 等同於x=x*3;
-= 除等於 x/=3; 等同於x=x/3;
%= 餘等於 x%=3; 等同於x=x%3;
關係運算符
用於進行比較的運算符稱作爲關係運算符
關係運算符的比較規則:
- 數字和數字比較, 直接比較大小
- 數字和字符串比較, 字符串轉換爲數字後再比較
- 字符串和字符串比較, 進行字符的ASCII碼值比較
比較注意事項:
- 布爾值 ture=1, false=0
- 含有NaN的運算都爲false,undefined 和null 都不等於0或者flase
- 如果要恆等, 則必須值和類型都要相等;
> 大於 若左邊數據大於右邊數據,返回 true,否則返回 false。
3>2 //true
< 小於 若左邊數據小於右邊數據,則返回布爾值true,否則返回false。
2<3 //true
>= 大於等於 若左邊數據大於或等於右邊數據,返回 true,否則返回 false。
2>=2 //true
3>=2 //true
<= 小於等於。若左邊數據小於或等於右邊數據,返回 true,否則返回 false。
2<=2 //true
2<=3 //true
== 相等 若兩數據大小相等,返回 true,否則返回 false
2==2 //true
2=='2' //true
!= 不等 若兩數據大小不相等,返回 true,否則返回 false。
2!=5 //true
=== 全等(恆等) 若兩數據大小和數據類型都相等,返回 true,否則返回 false。
55==='55' //false
55===55 //true
!== 不全等(不恆等) 若兩數據大小或數據類型不相等,返回 true,否則返回 false。
55!=='55' //true
55!==55 //false=0
布爾值 ture=1, false=0
false == 0 //true
true == 1 //true
true == 2 //false
undefined 是派生自 null 的,兩個數據大小相等,數據類型不等。
null == undefined //true
null === undefined //false
含有NaN的運算都爲false
'NaN' == NaN //false
5 == NaN //false
NaN == NaN //false
undefined 和null 都不等於0,flase
null == 0 //false
null == false //false
undefined == 0 //false
undefined == false //false
邏輯運算符
邏輯運算符通常用於布爾值的操作,一般和關係運算符配合使用,有三個邏
輯運算符: 邏輯與&&(AND)、邏輯或||(OR)、邏輯非!(NOT)。
&& 邏輯與:
如果第一個操作數返回是 false,第二個數不管是true還是false都會返回false。
即符號兩邊的操作數爲真,返回true,否則返回false。
var flag=(true) && (true) //true
var flag=(false) && (true) //false
var flag=(false) && (false) //false
|| 邏輯或:
如果第一操作數的求值結果爲 true,第二個數不管是true還是false都會返回true。
即符號兩邊的操作數同時爲假,返回false,否則返回true。
var flag=(false) || (false) //false
var flag=(true) || (true) //true
var flag=(true) || (false) //true
! 邏輯非:
邏輯非運算符可以用於任何值。無論這個值是什麼數據類型,這個運算符都會返
回一個布爾值。它的流程是:先將這個值轉換成布爾值,然後取反,規則如下:
操作數爲真,返回false,否則返回true
var flag=!(true); //false
var flag=!(false); //true
操作數是一個空字符串, 返回true; 非空字符串, 返回false
var flag=!('') //true
var flag=!('test') //false
操作數是數值0, 返回true; 任意非0數值(包括 Infinity),返回false
var flag=!(0) //true
var flag=!(1) //false
操作數是NaN, 返回true
var flag=!(NaN) //true
操作數是undefined, 返回true
var flag=!(undefined) //true
字符串運算符
字符串運算符: 字符串運算符只有一個,即:“+”。
它的作用是將兩個字符串相加。 規則:至少一個操作數是字符串
var result1='hello'+'world'; // 兩個都是字符串, 直接連接兩個字符串
console.log(result1); //helloworld
console.log(typeof result1);
//如果其中有一個是字符串, 另一個是其他類型, 則會先將其他的類型強制轉換成字符,然後再連接
var result2='hello'+2;
console.log(result2); //hello2
console.log(typeof result2);
三目運算符(三元條件運算符)
三目運算符(三元條件運算符): 表達式 ? 值1 : 值2
如果表達式的值爲true,則結果取值1。否則爲值2
語法爲:(如果條件表達式的值爲true,則結果取值1。否則爲值2。)
條件表達式 ? 值1 : 值2
var age=11;
var status = (age >= 18) ? "major" : "minor";
當age大於等於18的時候,語句將第一個值“major”賦值給status;否則將第二個值“minor”賦值給status。
運算符的優先級
| 運算符 |描述 |
| ------------- |:-------------: |
| . [] () |對象成員存取、數組下標、函數調用等 |
| ++ -- ~ ! delete new typeof void |一元運算符 |
|* / % |乘法、除法、求餘|
|+ - +|加法、減法、字符串連接|
|<< >> >>>|移位|
|< <= > >= instanceof |關係比較、檢測類實例|
|== != === !==| 恆等(全等)|
|& |位與|
|^ | 位異或|
| | |位或 |
|&& |邏輯與|
| |||邏輯或|
|?:|三元條件|
|= x= |賦值、運算賦值|
|= x= |賦值、運算賦值|
|, |多重賦值、數組元素|
表達式
表達式是javascript中的一個短語,表達式指的是可用於計算的式子,即可能產生一個值的式子。
變量名也是一種簡單的表達式,它的值就是賦值給變量的值。
複雜的表達式由運算符和操作數 (變量或常量) 組成的式子
算術運算符組成的式子叫算術表達式
關係運算符組成的式子叫關係表達式或者條件表達式
邏輯運算符組成的式子叫做邏輯表達式
如:2+3;a+5;c>3; a&&b等
流程控制
JavaScript有三種基本的流程控制結構:順序結構、選擇結構和循環結構,流程控制是用來控制代碼的執行順序。
JavaScrip在順序結構中可以包含選擇結構和循環結構
順序結構:
指按照語句出現的先後順序依次執行
選擇結構:
指按照給定的邏輯條件來決定執行順序。
選擇結構可以分爲單向選擇、雙向選擇和多向選擇。但無論是單向還是多向選擇,程序在執行過程中都只能執行其中一條分支。
循環結構
指根據代碼的邏輯條件來判斷是否重複執行某一段程序。若邏輯條件爲true,則重複執行,即進入循環,否則結束循環。
循環結構可以先判斷邏輯條件,也可以先執行循環體
if單支語句
if條件判斷語句的寫法:
if(表達式){
執行語句
}
當括號內的表達式結果成立( 爲true 時) ,則執行大括號內的語句,否則不執行。
注意:
- if後面的()不能省略。
- 一條執行語句可以省略{}, 多條時不能省略{}, 建議不管是一條還是多條都寫上{}
if雙分支語句的寫法:
if(表達式){
執行語句1
}
else{
執行語句2
}
當if 括號內的表達式結果成立,執行執行語句1 ,否則執行執行語句2;
注意:else語句必須和if語句搭配出現使用
if多分支語句
if多分支語句的寫法:
if(表達式){
執行語句1
}
else if(表達式2){
執行語句2
}
else if(表達式3){
執行語句3
}
else{
執行語句n
}
從上往下,滿足哪個條件就執行其相對應的語句,都不滿足時,執行最後的else
的語句,只能進入其中之一。
if的嵌套
將整個if語句塊插入另一個if語句塊中
if (表達式1) {
if (表達式2) {
if (表達式3){
語句;
}
else{
語句;
}
}
else{
語句;
}
}
注意: 嵌套if時,最好不要超過三層; 內層的每一對if...else代碼要縮進且對
齊;編寫代碼時,else要與最近的if配對。
需求:
輸出不同年齡段的稱呼:
少年:18週歲以下,青年:18週歲至40週歲,中年:40週歲至60週歲,老年:60週歲以上
嬰兒[0歲-1歲)、幼童[1歲-4歲)、小童[4歲-7歲),中童[7歲-13歲)、
大童[13歲-18歲),成年人等於18歲
switch case 語句
用於基於不同的條件來執行不同的動作,如果有多個條件,可以使用嵌套的if語句來解決,但這種方法會增加程序的複雜度,降低程序的可讀性。
//n可以是變量/表達式,將n的值與常量a1、a2、……比較,若n與其中某個值相等時,執行相應數據後面的語句,且當遇到關鍵字break時,程序跳出switch結構;若找不到與n相等的值,則執行關鍵字default下面的語句。
switch(n)
{
case a1:
執行代碼塊 1
break;
case a2:
執行代碼塊 2
break;
default:
與 case a1 和 case a2 不同時執行的代碼
}