最詳細的JavaScript高級教程(六)操作符

寫在前面

我曾經輔導過很多人編程,其中有學霸也有學渣,而編程這個事情,學霸經常會陷入一個 誤區:所有的語法都要記住,所有的特性都要瞭如指掌纔算精通。而我們所面對的筆試甚至一些面試也加深了這種印象,事實真的如此麼?

對於枯燥的語法知識,我們要知其然,知其所以然,但是不需要死記硬背,我們的大腦善於記住感性的東西,所謂:一朝被蛇咬就是如此,我們講的一些不常用的特性,大家只需要在大腦中形成這裏有坑的印象,用的時候回來再看就是了,記住:書是用來查的,教程也是。

自增自減

自增自減的邏輯與c一致,這裏不過多敘述,我們只關注一下不同類型的數據自增自減的情況,這裏放一個例子以供查詢就好:
在這裏插入圖片描述

位操作

js中位操作與c中一致,新增了一個無符號的右移,這裏我們複習一下即可

  • 按位非 ~
  • 按位與 &
  • 按位或 |
  • 按位異或 ^
  • 左移 << 注意,左移不影響符號位,不會影響數字的正負
  • 有符號右移 >> 這個右移不會影響符號
  • 無符號右移 >>> 這個右移因爲標誌位一起填0導致負數變正數且因爲負數中1很多,導致出來的數字很大

邏輯運算符

與c中一致,需要注意的是與常用於短路操作,或常用於備用值的賦值,複習一下:

  • 與 && 常用於短路操作
  • 或 || 常用於備用值 a = b || c 表示如果b是null則把c賦值給a
  • 非 !
    注意,&&如果兩邊不是布爾值,會按照下面的邏輯運行:
    在這裏插入圖片描述
    || 如果兩邊不是布爾值,按照下面的邏輯
    在這裏插入圖片描述

乘除操作符

在乘除操作符中,我們需要考慮一下無窮大和NaN的介入,我們記錄一下一些特殊的乘除操作結果

  • 乘法 *
    在這裏插入圖片描述
  • 除法 /
    在這裏插入圖片描述
    在這裏插入圖片描述
  • 餘數 %
    在這裏插入圖片描述

加減運算符

加減運算符同樣需要考慮無窮大和NaN的介入

  • 加 需要注意的是,加號兩邊只要有一邊是字符串,這個結果將會是字符串連接
    在這裏插入圖片描述
  • 減法
    在這裏插入圖片描述
    在這裏插入圖片描述

關係運算符

關係運算符包括:大於 小於 大於等於 小於等於,在使用這些關係運算符的時候也需要注意相應的特殊類型的取值
在這裏插入圖片描述
這裏我們重點關注一下字符串的比較大小,由於是比較編碼值,所以要注意下面幾個場景

  • “Ba” < “aL” 由於大寫字母的編碼都小於小寫字母,所以如果想實現字符串的比較,需要先都轉化爲大寫或者小寫比較 “BL”.toLowerCase()
  • “23” < “3” 因爲比較的時候會先比較第一位,第一位有大小之後後面的就不會比較了
  • “23” < 3 返回false,因爲字符串會先轉化爲數值進行比較
  • “a” < 3 false,因爲"a"會轉爲NaN
  • NaN和任何比較,不管大於還是小於都返回false

相等和全等(重要)

  • 相等:比較對象轉化爲相近的對象進行比較
  • 全等:不轉換光比較

相等的比較遵循下面的原則:

  • 布爾值 true是1 false是0 轉化爲數值進行比較
  • 一個字符串一個數值比較,把字符串轉爲數值
  • 對象和別人比較,調用valueOf之後比較

下面的表整理了相等的一些特殊情況,主要是undefined null NaN,我們需要注意的是

  • null == undefined
  • NaN跟誰都不等,包括自己
  • 對象指向一致則相等
    在這裏插入圖片描述

全等則是先比較類型,再比較值,如果兩個類型不同,則直接false

"55" == 55 // true
"55" === 55 // false

需要注意的是,undefined 相等於 null,但是 undefined 不全等於 null

undefined == null // true
undefined === null // false

注意:js中推薦使用全等以避免可能帶來的類型轉化問題。

冒號表達式

這個就是普通的冒號表達式

var a = (b > c) ? d : e; // 表達式爲true返回d 表達式爲false返回e

賦值操作

= 爲賦值操作符,js支持 += *= 等,但是用這些簡化的賦值操作符不會帶來任何的性能提升。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章