【1】JavaScript編程全解筆記(一)

1.概述

本書涵蓋了 JavaScript 各個方面的主題,從客戶端以及服務端 JavaScript 等基礎內容,主要講了  HTML五、Web API、Node.js 與 WebSocket 等技術。正則表達式

本書前半部分對 JavaScript 基礎進行解說。編程

本書後半部分主要介紹包括客戶端 JavaScript、HTML五、Web API 以及服務器 JavaScript 等與 JavaScript 相關的應用領域。數組

 

第一章 JavaScript 基礎

1. 宿主對象:理解爲其餘設計語言的外部庫的概念,也就是語言中能夠更換的部分。(PS: 就比如我到一家公司,老闆是個人宿主,我換另一家公司,另一個老闆又變成了個人宿主。)服務器

 

2. Web 應用程序的組成構造:閉包

 

 

第二章 JavaScript 語言基礎

2.1 JS 的特色

1. 解釋型語言:解釋型語言直接在運行環境中執行代碼。app

2. 相似於 C 和 Java 的語法結構函數式編程

3. 動態語言:動態語言的變量和函數是不指定返回值類型的。函數

4. 基於原型的面向對象this

5. 字面量的表現能力spa

6. 函數式編程:JS具有了匿名函數,能夠把函數做爲對象來使用,因此同時也可以支持函數式編程。

 

2.2 變量的基礎

1. 變量的做用是給某一個值或對象標註名稱

2. JS 中沒有變量的類型,由於沒有變量類型,因此對於同一個變量,既能夠是字符串,也能夠是數字。像下面這樣 

3. 被聲明但未進行任何賦值的變量,其值是 undefined

4. 省略 var, 好比:foo = 3; 這樣的變量被稱爲隱式聲明變量,採用隱式聲明變量都是全局變量函數外部經過 var 聲明的變量也是全局變量。( 避免使用隱式變量 )。

5. 常量 聲明常量使用關鍵字 const 

 

2.3 函數基礎

1. 函數是由一連串的子程序(語句的集合)所組成的,能夠被外部程序調用,向函數傳遞參數以後,函數能夠返回必定的值。函數也是一種對象

2. 函數的語法:函數以關鍵字 function 開始, 其後面跟有函數名、參數列表和函數體。

 

 

3. 函數聲明時沒必要指定形參的類型,任何類型均可以做爲實參傳遞,此外,形參的數量和實參的數量能夠不一致。 

   

4. 匿名函數:匿名函數的返回值是一個 Function 對象的引用。

 

 

2.4 對象的基礎

1.  JS 中的對象是一個名稱與值配對的集合,這種名稱與值配對被稱爲屬性。這樣一來,JS 對象能夠定義爲屬性的集合

2. 能夠經過對象字面量表達式來生成一個對象

 

 

3. 屬性的訪問能夠經過運算符 ( . )( [] ) 訪問 。

 

4. 能夠把任意類型的值、對象或者函數賦值給對象的屬性

 

2.5 數組的基礎

1. JS 中,數組用於表達有順序關係的值的集合的語言結構。JS 中數組並不是是一種內建類型。

 

第三章 JavaScript 數據類型

3.1 數據類型的定義

1. JS 中有 5 種基本數據類型, 5 種數據類型以外的都被稱爲 Object 類型。

  1. 字符串型 ( String )

  2. 數值型 ( Number )

  3. 布爾型 ( Boolean )

  4. null 型

  5. undefined 型

      基本數據類型的實例被稱爲 ' 值 ',  Object 類型的實例被稱爲 "  對象 "

 

2.  JS 中值和對象具備數據類型,而變量沒有數據類型。由於 JS 中的變量不具備數據類型,因此能夠對其賦任意類型的值,也可使其引用任意類型的對象。

  因此 JS 被稱爲動態數據類型語言。

 

3. JS 是基於原型的編程風格,所謂類型也就是行爲方式上的共性。因爲每一個對象都具備共同的行爲方式,因此可使用原型對象。 

 

3.2 基本數據類型和引用類型

1. 基本數據類型變量直接保存有數值等類型的數據值,而引用類型變量則保存有對象的引用。

 

3.3 字符串型

1.  字符串的比較,JS 中有兩種等值運算符,即 === 和 ==。二者的區別在於,比較的時候是否會進行數據類型的轉換。=== 不會對數據類型進行轉換。

2. 字符串類 ( String 類 ), JS 中除了內建類型的字符串以外,還存在一個字符串類。大體至關於 Java 中數值型和包裝類型( Integer ) 的關係。

3. 字符串型和 String 類之間也一樣支持隱式類型轉換

4. 字符串對象,可使用 new 運算符,來顯示的生成一個字符串對象。 var sobj = new String('abc');

5. == 會進行隱式的轉換。

 

6. 合理的運用字符串的隱式轉換。

  

7.  調用 String 函數

8. String 類的函數以及構造函數調用

 

3.4 數值型

1. JS 中全部的數值都是 浮點小數

2. 浮點數的一些例子

 

3. 相似於 String 類,JS 中也存在數值類 ( Number類 )

 

3.5 布爾型

 

 

3.6 null 型

1. null 型只可以取 null 這一個值,null 值是一個字面量。

 

3.7 undefined 型

1. undefined 型只能取 undefined 這一個值。

 

 

 

3.8 Object 類型

1. 從字符串轉換成數值,一般的作法是使用 Number 函數、parseInt 函數、parseFloat 函數。

 

 

2. 字符串到數值的隱式數據類型轉換

 

3. ' + ' 號運算符在單目運算的狀況下則是正號運算,好比 +'100' 轉換成 數值 100

 

4. 慣用的數據類型轉換

 

5. boolean 的隱式類型轉換, 除了如下類型轉換後結果爲 false 值之外,其餘的都是 true

 

6. 使用雙重 !! 進行隱式轉換爲 boolean 類型。

 

7. Object 類型在被轉換爲布爾型以後結果一定爲 true

 

8. 經過函數調用方式得到的結果就再也不是 Object 類型,而是相應的內建類型了。

 

第四章 語句、表達式和運算符

4.1 標識符

1. 習慣上,如下劃線( _ ) 開始的標識符被做爲 " 內部標識符 " 來使用, 好比: _calcNum, _name。

 

4.2 字面量

1. 字面量 ( literal ) 指的是,在代碼中寫下這些值後,將會在運行時直接使用這些值的字面含義。

2. if... else ...

3. switch -case: switch 括號內的表達式能夠是任意類型。case 標籤中也能夠寫任意類型。switch 括號內的表達式,與

 case 標籤中所寫的各個表達式,依次經過相等運算符(===)進行比較。

4. JS 中有 5 種循環語句。

 while(條件表達式) {  }

 do ... while ( 條件表達式 )

   for( 初始化表達式; 條件表達式; 更新表達式 ) {  }

   for in () 

   for each ( 表達式 in 對象表達式 )  非 ( ECMAScript 標準功能 )    

5. 表達式:即由運算符和操做數鏈接而成的式子。

 

第五章 變量與對象

5.1 變量的聲明

1. 變量聲明的習慣用法:var a = a || 1; 

上面 var a = a || 1; 方式的由來,請看下圖。

 

2. 變量又分爲基本類型的變量和引用類型的變量。

 

 

3. 構造函數: 構造函數老是以 new 表達式調用,首字母大寫( 如:MyClass ), 構造函數在最後會隱式的執行 return this 操做。

    不建議在構造函數內使用 return 語句。

4. 屬性的訪問:能夠經過運算符 (.) 或中括號 ([]) 來訪問,須要注意的是,點運算符以後書寫的屬性名會被認爲是標識符,而中括號運算符內的則

   被轉換爲 字符串值的式子

 

5. 屬性的枚舉: 能夠經過 for in 語句對屬性名進行枚舉,在經過 for in 語句中使用中括號運算符,能夠間接的實現對屬性值的枚舉。

 

6. 屬性的屬性

 

7. 實現不可變對象的方式

1. Object.preventExtensions(obj);

2. Object.seal 

3. Object.freeze

 

8. this

1. this 引用規則

2. this 的注意點

    1. 方法的調用的注意點

 

2. 在方法內部調用方法的狀況

3. apply 與 call 的區別:不一樣之處在於二者對其參數的傳遞方式,apply 剩餘的參數使用 數組 來傳遞, 而 call 是直接按原樣傳遞形參。

 

9. 原型繼承

 

10. 原型鏈

屬性讀取實例

 

在讀取屬性的時候,將首先查找自身的屬性。若是沒有找到,則會進一步查找對象 MyClass 的 prototype 對象的屬性。這就是原型鏈的基本原理。

 

原型屬性寫入操做

 

11. 鴨子類型判斷

判斷對象中含有哪些屬性,是比 instanceof 運算更爲廣泛的類型判斷方式。這種直接分析對象的操做以判斷其類型的方法俗稱爲鴨子類型判斷。

" in " 運算是一種能夠用於判斷鴨子類型的方法。

 

12. Object 類

 1. Object.create() 是除了對象字面量與 new 表達式以外的第三種官方的對象生成方法。

 

 

13. 標準對象 

14. Object 類

15. 全局對象和全局變量

16. Math 對象

 

17. Error 對象

 

第六章 函數與閉包

1. Arguments 對象

 

2. 遞歸函數

使用遞歸函數的注意點:必須在遞歸函數內部設置執行的中止條件判斷,這稱爲終止條件。終止條件的代碼並不必定非要寫在遞歸函數的頭部,寫在頭部便於閱讀

 

3. 做用域

 

4. 函數也是一種對象

 

5. 閉包

閉包的前提條件是須要在函數聲明的內部聲明另外一個函數 ( 即嵌套的函數聲明 )。 

閉包是具備狀態的函數。

 

6. 爲何要使用模塊?

JS 的程序代碼即便被分割爲多個源文件以後,也能相互訪問其全局名稱。致使了牽一髮而全身動,維護成本過高

解決方案

1. 避免使用全局變量

2. 經過閉包實現信息隱藏

 

語法: (function() { 函數體 })() 

 

 

第七章 數據處理

1. 數組:數組是一種有序的元素集合。在 JS 中,數組的長度是可變的。只要將元素加入到數組的尾部,數組的長度就會自動增加。同時,也可以自由改寫數組

中的每個元素。

2. 數組的生成方式:數組能夠經過字面量與 new 表達式兩種方法生成。

3. 在 JS 中咱們一般先生成一個長度爲 0 的數組,以後再向其中添加元素。

4. 不須要確保數組中元素類型的一致性。能夠將任意的值或者對象的引用指定爲元素。

 

5. 藉助 arr.length 向數組的末尾添加元素是一種習慣用法。

6. 遍歷數組

 

雖然經過 for in 語句或 for each in 語句也能夠枚舉數組元素,但他們沒法保證枚舉的順序。若是須要確保枚舉定期望順序進行,請使用 for 語句。 

7. forEach

8. 多維數組

9. 數組也是一種對象,它是 Array 對象 ( Array類 ) 的對象實例。

 

10. 經過數組字面量表達式生成的數組也是 Array 的實例對象。

11. Array 類

Array 類的函數以及構造函數

 

Array 類的屬性

 

Array.prototype  對象的屬性

 

Array 類實例的屬性

 

12.  數組排序

 

sort 方法在調換元素時會對這一數組進行改變。改寫目標對象的方法被稱爲破壞性的方法。 JS 中,數組含有不少破壞性的方法。如下都是破壞性方法

pop, push, reverse, shift, sort, splice, unshift 

13. 經過數組來生成字符串

14. 數組的複製

複製數組使用 concat 和 slice 對數組進行復制

15. 深複製和淺複製

 

16. 數組元素的刪除 splice 

17. 篩選處理

18. 數組的內部實現

19. 迭代器

20. JSON

JSON 可以經過 4 種基本數據類型以及 2 種結構化數據類型來表示。 

4 種基本數據類型是指字符串,數值,布爾以及 null 型。結構化數據類型是指對象與數據這兩種。

 

21. 日期處理

22. 正則表達式:  正則表達式是一種適用於字符串的模式匹配的語言。

 

正則表達式的例子

 

使用全局旗標

 

嚴格模式

 

操做小技巧

1. 聲明變量: var a = a || 0;

2. 向數組末尾添加元素: arr[arr.length] = 'last';

3. 定義模塊: 

// 減小全局變量引起的衝突
var MyModel = {
      a: 2,
      b: 3,
      sum: function(){
          console.log('hello');
   }
}

4. 遍歷數組

    1. 數組.forEach( 數組元素, 下標, 數組對象 );

    arr.forEach( e, i, a );  

    2. for in: for ( var n in arr ); 

 

 

ing!!!

相關文章
相關標籤/搜索