現代JavaScript 教程(JavaScript基礎知識)總結


變量

JavaScript 中有八種基本的數據類型(譯注:前七種為基本數據類型,也稱為原始類型,而 object 為復雜數據類型)。

  • number 用於任何類型的數字:整數或浮點數,在 ±(253-1) 范圍內的整數。
  • bigint 用於任意長度的整數。
  • string 用於字符串:一個字符串可以包含 0 個或多個字符,所以沒有單獨的單字符類型。
  • boolean 用於 truefalse
  • null 用於未知的值 —— 只有一個 null 值的獨立類型。
  • undefined 用於未定義的值 —— 只有一個 undefined 值的獨立類型。
  • symbol 用於唯一的標識符。
  • object 用於更復雜的數據結構。

我們可以通過 typeof 運算符查看存儲在變量中的數據類型。

  • 兩種形式:typeof x 或者 typeof(x)
  • 以字符串的形式返回類型名稱,例如 "string"
  • typeof null 會返回 "object" —— 這是 JavaScript 編程語言的一個錯誤,實際上不是一個 object

交互:alert、prompt、confirm

alert

顯示信息。

prompt

顯示信息要求用戶輸入文本。點擊確定返回文本,點擊取消或按下 Esc 鍵返回 null

confirm

顯示信息等待用戶點擊確定或取消。點擊確定返回 true,點擊取消或按下 Esc 鍵返回 false

類型轉換

有三種常用的類型轉換:轉換為 string 類型、轉換為 number 類型和轉換為 boolean 類型。

字符串轉換 —— 轉換發生在輸出內容的時候,也可以通過 String(value) 進行顯式轉換。原始類型值的 string 類型轉換通常是很明顯的。

數字型轉換 —— 轉換發生在進行算術操作時,也可以通過 Number(value) 進行顯式轉換。

數字型轉換遵循以下規則:

變成……
undefined NaN
null 0
true / false 1 / 0
string “按原樣讀取”字符串,兩端的空白會被忽略。空字符串變成 0。轉換出錯則輸出 NaN

布爾型轉換 —— 轉換發生在進行邏輯操作時,也可以通過 Boolean(value) 進行顯式轉換。

布爾型轉換遵循以下規則:

變成……
0, null, undefined, NaN, "" false
其他值 true

上述的大多數規則都容易理解和記憶。人們通常會犯錯誤的值得注意的例子有以下幾個:

  • undefined 進行數字型轉換時,輸出結果為 NaN,而非 0
  • "0" 和只有空格的字符串(比如:" ")進行布爾型轉換時,輸出結果為 true

基礎運算符,數學

數學

  • 加法 +,
  • 減法 -,
  • 乘法 *,
  • 除法 /,
  • 取余 %,
  • 求冪 **(求冪運算 a ** ba 乘以自身 b 次。適用於非整數)

+運算符

  • 作為二元運算符用於鏈接自負床
  • 作為一元運算符用於將運算元轉化位數字

賦值運算符=

  • 語句 x = value 將值 value 寫入 x 然后返回 x

原地修改

  • 所有算術和位運算符都有簡短的“修改並賦值”運算符:/=-= 等。這類運算符的優先級與普通賦值運算符的優先級相同,所以它們在大多數其他運算之后執行

自增/自減

運算符 ++-- 可以置於變量前,也可以置於變量后。

  • 當運算符置於變量后,被稱為“后置形式”:counter++
  • 當運算符置於變量前,被稱為“前置形式”:++counter
  • 如果自增/自減的值不會被使用,那么兩者形式沒有區別
  • 如果我們想要對變量進行自增操作,並且 需要立刻使用自增后的值,那么我們需要使用前置形式
  • 如果我們想要將一個數加一,但是我們想使用其自增之前的值,那么我們需要使用后置形式

位運算符

  • 按位與 ( & )
  • 按位或 ( | )
  • 按位異或 ( ^ )
  • 按位非 ( ~ )
  • 左移 ( << )
  • 右移 ( >> )
  • 無符號右移 ( >>> )

參考 位操作符

逗號運算符

  • 逗號運算符能讓我們處理多個語句,使用 , 將它們分開。每個語句都運行了,但是只有最后的語句的結果會被返回。
  • 請注意逗號運算符的優先級非常低,比 = 還要低

值的比較

  • 比較運算符始終返回布爾值。
  • 字符串的比較,會按照“詞典”順序逐字符地比較大小。
  • 當對不同類型的值進行比較時,它們會先被轉化為數字(不包括嚴格相等檢查)再進行比較。
  • 在非嚴格相等 == 下,nullundefined 相等且各自不等於任何其他的值。
  • 在使用 >< 進行比較時,需要注意變量可能為 null/undefined 的情況。比較好的方法是單獨檢查變量是否等於 null/undefined

條件分支:if 和 '?'

邏輯運算符

||(或)

一個或運算 || 的鏈,將返回第一個真值,如果不存在真值,就返回該鏈的最后一個值。

特殊用法

  1. 獲取變量列表或者表達式中的第一個真值。

    用或運算符選擇出有數據的那一個變量,如果都沒有,則在或運算的鏈最后放一個值作為結果。

  2. 短路求值(Short-circuit evaluation)。

    || 對其參數進行處理,直到達到第一個真值,然后立即返回該值,而無需處理其他參數。利用這個特性,若操作數是一個有副作用的表達式則可以發揮作用。

&&(與)

與運算返回第一個假值,如果沒有假值就返回最后一個值。

💡與運算 && 的優先級比或運算 || 要高。

!(非)

邏輯非運算符接受一個參數,並按如下運作:

  1. 將操作數轉化為布爾類型:true/false
  2. 返回相反的值。

兩個非運算 !! 有時候用來將某個值轉化為布爾類型,也可以使用內置的 Boolean 函數來轉化位布爾類型

空值合並運算符'??'

  • 空值合並運算符 ?? 提供了一種從列表中選擇第一個“已定義的”值的簡便方式。

    它被用於為變量分配默認值:

    // 當 height 的值為 null 或 undefined 時,將 height 的值設置為 100
    height = height ?? 100;
    
  • ?? 運算符的優先級非常低,僅略高於 ?=,因此在表達式中使用它時請考慮添加括號。

  • 如果沒有明確添加括號,不能將其與 ||&& 一起使用。

循環

通常使用 while(true) 來構造“無限”循環。這樣的循環和其他循環一樣,都可以通過 break 指令來終止。

如果我們不想在當前迭代中做任何事,並且想要轉移至下一次迭代,那么可以使用 continue 指令。

break/continue 支持循環前的標簽。標簽是 break/continue 跳出嵌套循環以轉到外部的唯一方法。

"switch"語句

  • switch語句中判斷的條件是是否嚴格相等(===

函數

函數聲明方式如下所示:

function name(parameters, delimited, by, comma) {
  /* code */
}
  • 作為參數傳遞給函數的值,會被復制到函數的局部變量。
  • 函數可以訪問外部變量。但它只能從內到外起作用。函數外部的代碼看不到函數內的局部變量。
  • 函數可以返回值。如果沒有返回值,則其返回的結果是 undefined

為了使代碼簡潔易懂,建議在函數中主要使用局部變量和參數,而不是外部變量。

與不獲取參數但將修改外部變量作為副作用的函數相比,獲取參數、使用參數並返回結果的函數更容易理解。

函數命名:

  • 函數名應該清楚地描述函數的功能。當我們在代碼中看到一個函數調用時,一個好的函數名能夠讓我們馬上知道這個函數的功能是什么,會返回什么。
  • 一個函數是一個行為,所以函數名通常是動詞。
  • 目前有許多優秀的函數名前綴,如 create…show…get…check… 等等。使用它們來提示函數的作用吧。

函數表達式

  • 函數是值。它們可以在代碼的任何地方被分配,復制或聲明。
  • 如果函數在主代碼流中被聲明為單獨的語句,則稱為“函數聲明”。
  • 如果該函數是作為表達式的一部分創建的,則稱其“函數表達式”。
  • 在執行代碼塊之前,內部算法會先處理函數聲明。所以函數聲明在其被聲明的代碼塊內的任何位置都是可見的。
  • 函數表達式在執行流程到達時創建。

什么時候使用函數表達式:

例如:

嚴格模式下,當一個函數聲明在一個代碼塊內時,它在該代碼塊內的任何位置都是可見的。但在代碼塊外不可見。

如果需要依賴於代碼運行過程中產生的結果來聲明函數,函數可能在一個代碼塊中,此時其他部分的代碼將不能使用這個在代碼塊中聲明的函數。

這時可以使用函數表達式,將函數賦值給在代碼塊外聲明的變量

箭頭函數

  1. 不帶花括號:(...args) => expression — 右側是一個表達式:函數計算表達式並返回其結果。
  2. 帶花括號:(...args) => { body } — 花括號允許我們在函數中編寫多個語句,但是我們需要顯式地 return 來返回一些內容。

原文地址:JavaScript 基礎知識


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM