寫在前面:電腦被髮明的初衷僅僅是為了快速實現一些數學計算,然而經過多年發展,電腦已經不單單能實現快速計算這麼簡單的工作了,現代電腦不僅能夠進行數值的計算,還能進行邏輯計算,還具備存儲記憶功能,是能夠按照程式運行,自動、高速處理海量數據的現代智能電子設備,儼然已經成了我們生活的必需品。有興趣的同 ...
寫在前面:電腦被髮明的初衷僅僅是為了快速實現一些數學計算,然而經過多年發展,電腦已經不單單能實現快速計算這麼簡單的工作了,現代電腦不僅能夠進行數值的計算,還能進行邏輯計算,還具備存儲記憶功能,是能夠按照程式運行,自動、高速處理海量數據的現代智能電子設備,儼然已經成了我們生活的必需品。有興趣的同學可以去北大公開課聽一聽《計算概論A》的前幾節課。
即使電腦已經發展至此,但它工作的本質還是計算。然而計算就必然涉及到運算符,這就引出了我們今天的主題,JavaScript中的操作符。
一 JavaScript中的算術運算符
和數學運算一樣,JS中也包括+(加)、-(減)、*(乘)、/(除)、%(模,即取餘)。
唯一不同的是=(等號),在數學中是表示兩個相等的一種關係判斷符號,而在JS中,它表示賦值運算,可以認為它的功能是把左邊變數的值設置為右邊提供的值(也可以是表達式計算後的值)。
賦值運算的表達式是:變數 = 值/表達式。
而JS中的等於符號是“==”和“===”,稍後將詳細說明他們的區別。
另外,JS中數字的表達是有範圍的,5e-324 ----- 1.7976931348623157e+308之間。可以使用Number.MIN_VALUE和Number.MAX_VALUE查看。超出這個範圍將顯示-infinity或infinity。
1、+(加)
a: 如果操作數都是數值,則執行數學運算
b:如果任意一個操作數是NaN,則返回NaN
c:infinity + infinity = infinity
d:(-infinity) + (-infinity) = -infinity
e:infinity + (-infinity) = NaN
f:如果有任意一個操作數是字元串,則先把另一個轉換成字元串,然後拼接
2、-(減)
a: 如果操作數都是數值,則執行數學運算
b:如果任意一個操作數是NaN,則返回NaN
c:infinity - infinity = NaN
d:(-infinity) - (-infinity) = NaN
e:infinity - (-infinity) = infinity
f:-infinity - infinity = -infinity
3、*(乘)
a:如果操作數都是數值,則執行數學運算
b:如果任意一個操作數是NaN,則返回NaN
c:infinity * 0 = NaN
d: infinity乘以任何非零操作數,都返回infinity,正負取決於非零操作數的正負
e:infinity * infinity = infinity
f:如果操作數不是數字,那麼JS會先把它轉換成數字,然後再應用上面的規則
4、/(除)
a: 如果操作數都是數值,則執行數學運算
b:如果任意一個操作數是NaN,則返回NaN
c:infinity / infinity = NaN
d: 0 / 0 = NaN
e:任何非0的有限數除以0,都返回infinity,正負取決於非零操作數的正負
f: 0除以任何數都等於0
g:任何有限數除以infinity都返回0
h:如果操作數不是數字,那麼JS會先把它轉換成數字,然後再應用上面的規則
5、%(模)
a:如果操作數都是數值,則執行數學運算
b:如果任意一個操作數是NaN,則返回NaN
c:如果被除數是infinity,則返回NaN(另一個操作數是有限數)
d:如果除數是infinity,則返回被除數(另一個操作數是有限數)
e: 0除以任何數都餘0
f:如果操作數不是數字,那麼JS會先把它轉換成數字,然後再應用上面的規則
詳細情況可以參考《JavaScript高級程式設計(第三版)》的運算符章節。
二 JavaScript的複合運算
1、+=
a += 1 等同於 a = a + 1
2、-=
a -= 1 等同於 a = a – 1
3、*=
a *= 1 等同於 a = a * 1
4、/=
a /= 1 等同於 a = a / 1
5、%=
a %= 1 等同於 a = a % 1
6、++
a++ 等同於 a = a + 1
7、--
a— 等同於 a = a – 1
需要註意的是:自增(++)和自減(--)出現的位置決定了變數是先取值,還是先計算。
符號出現在變數之前,則先計算,之後則先取值。
1 var a = 0; 2 console.log(a++);//0 3 console.log(++a)//2
三 JavaScript的比較運算(關係運算)
1、>(大於)
2、<(小於)
3、>=(大於或等於)
4、<=(小於或等於)
5、==(等於)不關註數據類型,比較值前會進行類型轉換,保證數據類型統一
6、===(絕對等於)數據類型和值都相等才成立
註意:連續比較運算時,從左往右依次比較。(這裡涉及到隱式類型轉換,每次比較會得到true或者false,調用Number(),再和下一個數字比較)最後返回true或false。
1 var a = 1; 2 console.log(0 < a < 2);//true 3 console.log(0 < a == 1);//true 4 console.log(0 > a < 1);//true
關於數據類型的轉換,會專門用一節來講解。
比較運算的規則如下:
a:都是數字,正常比較
b:都是字元串,比較字元串編碼值
c:若果一個是數字,則另一個江北轉換為數字在比較
d:如果一個是布爾值,則會先轉換成數字再比較
e:如果一個是對象,則先調用它的valueOf()方法,得到返回值再應用上面的規則。如果對象沒有此方法,則調用toString()方法。
這兩個方法將在以後介紹對象是詳細講解。
四 JavaScript的邏輯運算和三目運算
1、邏輯運算
a:邏輯與(&&),有一個條件為假則為假
1 var num = parseInt(prompt("please enter a number:")); 2 if(num >= 0 && num <=10){ 3 alert("yes,this number is between 0 and 10."); 4 } 5 //只有當數字既瞞足“num >= 0”又滿足“num <= 10”時才會彈出提示框
b:邏輯或(||),有一個條件為真則為真
1 var num = parseInt(prompt("please enter a number:")); 2 if(num < 0 || num >10){ 3 alert("yes,this number is not between 0 and 10."); 4 } 5 //只要num滿足其中一個條件就會彈出提示框了
c:邏輯非(!),取反
1 var myBoolean = true; 2 console.log(!myBoolean);//false 3 4 //用邏輯非可以判斷某個東西是否存在,比如某對象的屬性。 5 6 var myObj = { 7 name:"ren", 8 age:"12" 9 }; 10 console.log(myObj);//{name: "ren", age: "12"} 11 if(!myObj.sex){ 12 myObj.sex = "male"; 13 } 14 console.lof(myObj);//{name: "ren", age: "12", sex: "male"} 15 //可以看到,第二次列印是多了一個sex屬性,它的值為male
2、三目運算
表達式1?表達式2:表達式3;
判斷表達式1是否為真,若是則返回表達式2,否則返回表達式3
1 var num = parseInt(prompt("please enter a number:")); 2 if(num == 0){ 3 alert("this number is 0."); 4 }else{ 5 num < 0?alert("this is a negative number."):alert("this is a positive bumber"); 6 } 7 //當輸入數字小於0時會彈出“this is a negative number.”,大於0時會彈出“this is a positive bumber”
另外JavaScript也提供了位運算符,但個人覺得工作中用的不多,至少我到現在還沒用過,所以這裡就不列出來了,有興趣的同學也可以自行上網查閱,推薦MDN和《高程》。
下一次將專門講解JavaScript中的數據類型轉換,包括隱式轉換和顯式轉換。