2.5 運算子及運算子的優先順序
通過運算子,可以對一個或者多個值進行運算
比如typeof就是運算子,可以來獲得一個值的型別,返回值以字串的型別返回
1.算數運算子(二元運算子)
先將非number值轉化成number再運算(除了字串加法)
+ 對於字串有拼串操作 任何值和字串做加法,都會先轉化成字串,然後再進行拼串
-
*
/ 此處與C語言不同,C語言中,整數/整數是整除符號,js中就是除號
%
2.一元運算子
+ 正號
- 負號
對於非Number型別變數,加上一個正號可以直接轉換成Number型別變數(原理和Number函式一樣),如果不能轉換則變成NaN(隱式型別轉換)
3.自增和自減(與C語言類似)
++
--
4.邏輯運算子
JS中為我們提供了三種邏輯運算子
! 非
為任意的資料型別做兩次非運輸,即可將其轉化為布林值,原理與Boolean函式一樣
&& 與
|| 或
&&和||具有短路效應
對於非布林值進行與或運算,會先將其轉化為布林值,然後再運算,最後返回原值
與運算:
如果第一個值為true,則必然返回第二個值
如果第一個值為false,則必然返回第一個值
或運算
如果第一個值為true,則必然返回第一個值
如果第一個值為false,則必然返回第二個值
這是由於短路效應
5.賦值運算
=
+=
*=
/=
6.關係運算子
通過關係運算子可以比較兩個值之間的大小關係
關係成立返回true,關係不成立返回false
>
<
>=
<=
非數值之間的情況:
非數值比較時,會先轉化為數值,然後再返回布林值
任何值和NaN做任何比較都是false
如果符號兩端的值都是字串,不會將其轉換成數字進行比較
會按照字串之間的比較規則比較,字串比較規則跟java(Unicode)一樣
比較中文沒有意義
如果要比較兩個數字字串的內容大小時,一定要將一端的字串型別轉換成數值型別
==
例如:
console.log(10==4);//false
console.log("1"==1);//true
console.log("1"==true);//true
console.log(null==0);//false
做==比較時,大部分情況會先轉換成數值
undefined衍生自null
所以這兩個值做相等判斷時,會返回true
NaN不和任何值相等,包括它本身
判斷一個值是否是NaN:通過isNaN函式
!= 不相等
與相等==相反
不相等也會對變數進行自動型別轉換
===
全等,用來判斷兩個值是否全等,不會做型別轉換
!==
不全等,用來判斷兩個值是否不全等,不會做型別轉換
7.條件運算子
三元運算子
語法
條件句?語句1:語句2;
先判斷條件句,如果該值為true,則執行語句1,並返回執行結構
如果該值為false,則執行語句2,並返回執行結構
//獲取a和b的最大值
var max=a>b?a:b;
//獲取a、b、c的最大值
var max=a>b?(a>c?a:c):(b>c?b:c);//不推薦使用,不方便閱讀,要寫就一定要帶括號
8.逗號運算子
使用逗號運算子可以分割多個語句,一般用於多個變數的宣告
9.運算子的優先順序
參考JS運算表,若優先順序高,則計算優先順序高的;若優先順序一樣,則從左到右計算
可以使用()改變優先順序
2.6 語句
程式由一條條語句構成
在JS中可以使用{}來為語句進行分組
同一個{}中的語句稱為一組語句,也叫程式碼塊
它們要麼都執行,要麼都不執行
在程式碼塊的後邊就不用再寫分號了
JS中的程式碼塊,只具有分組的作用,沒有其他的用途
1.流程控制語句(與C語言類似)
1.條件判斷語句
2.條件分支語句
3.迴圈語句
2.條件判斷語句,if語句
1.語法1:
if(條件表示式)
語句或語句塊
2.語法2:
if(條件表示式)
語句或者語句塊
else
語句或者語句塊
3.語法3:(只會有一個程式碼塊被執行,一旦執行就會跳出if語句)
if(條件表示式)
語句或語句塊
else if(條件表示式)
語句或語句塊
else if(條件表示式)
語句或語句塊
else if(條件表示式)
語句或語句塊
else if(條件表示式)
語句或語句塊
else
語句或語句塊
3.條件分支語句,switch-case語句
1.語法:
switch(表示式){
case 表示式:
語句或者語句塊
break;
case 表示式:
語句或者語句塊
break;
case 表示式:
語句或者語句塊
break;
case 表示式:
語句或者語句塊
break;
case 表示式:
語句或者語句塊
break;
default:
語句或者語句塊
break;
}
2.執行流程:
在執行時依次將case後的表示式的值和switch後的表示式的值進行全等比較
如果比較結果為true,則從當前case處開始執行程式碼
如果比較結果為false,則繼續進行比較
3.使用break可以退出switch語句,不使用break的用法與C語言類似
4.使用if-else if-else也能代替switch語句
4.迴圈語句
while迴圈
do...while迴圈
for迴圈
巢狀for迴圈
**補充:質數判斷:
判斷質數比較難,則判斷是否是合數;正難則反
Math.sqrt(97) //97的開方
5.break和continue
outer:......break outer;跳出多重迴圈
outer:......continue outer;