本書涵蓋了 JavaScript 各個方面的主題,從客戶端以及服務端 JavaScript 等基礎內容,主要講了 HTML五、Web API、Node.js 與 WebSocket 等技術。正則表達式
本書前半部分對 JavaScript 基礎進行解說。編程
本書後半部分主要介紹包括客戶端 JavaScript、HTML五、Web API 以及服務器 JavaScript 等與 JavaScript 相關的應用領域。數組
1. 宿主對象:理解爲其餘設計語言的外部庫的概念,也就是語言中能夠更換的部分。(PS: 就比如我到一家公司,老闆是個人宿主,我換另一家公司,另一個老闆又變成了個人宿主。)服務器
2. Web 應用程序的組成構造:閉包
1. 解釋型語言:解釋型語言直接在運行環境中執行代碼。app
2. 相似於 C 和 Java 的語法結構函數式編程
3. 動態語言:動態語言的變量和函數是不指定返回值類型的。函數
4. 基於原型的面向對象this
5. 字面量的表現能力spa
6. 函數式編程:JS具有了匿名函數,能夠把函數做爲對象來使用,因此同時也可以支持函數式編程。
1. 變量的做用是給某一個值或對象標註名稱。
2. JS 中沒有變量的類型,由於沒有變量類型,因此對於同一個變量,既能夠是字符串,也能夠是數字。像下面這樣
3. 被聲明但未進行任何賦值的變量,其值是 undefined。
4. 省略 var, 好比:foo = 3; 這樣的變量被稱爲隱式聲明變量,採用隱式聲明變量都是全局變量。函數外部經過 var 聲明的變量也是全局變量。( 避免使用隱式變量 )。
5. 常量 聲明常量使用關鍵字 const
1. 函數是由一連串的子程序(語句的集合)所組成的,能夠被外部程序調用,向函數傳遞參數以後,函數能夠返回必定的值。函數也是一種對象。
2. 函數的語法:函數以關鍵字 function 開始, 其後面跟有函數名、參數列表和函數體。
3. 函數聲明時沒必要指定形參的類型,任何類型均可以做爲實參傳遞,此外,形參的數量和實參的數量能夠不一致。
4. 匿名函數:匿名函數的返回值是一個 Function 對象的引用。
1. JS 中的對象是一個名稱與值配對的集合,這種名稱與值配對被稱爲屬性。這樣一來,JS 對象能夠定義爲屬性的集合。
2. 能夠經過對象字面量表達式來生成一個對象。
3. 屬性的訪問能夠經過運算符 ( . )或 ( [] ) 訪問 。
4. 能夠把任意類型的值、對象或者函數賦值給對象的屬性。
1. JS 中,數組用於表達有順序關係的值的集合的語言結構。JS 中數組並不是是一種內建類型。
1. JS 中有 5 種基本數據類型, 5 種數據類型以外的都被稱爲 Object 類型。
1. 字符串型 ( String )
2. 數值型 ( Number )
3. 布爾型 ( Boolean )
4. null 型
5. undefined 型
基本數據類型的實例被稱爲 ' 值 ', Object 類型的實例被稱爲 " 對象 "
2. JS 中值和對象具備數據類型,而變量沒有數據類型。由於 JS 中的變量不具備數據類型,因此能夠對其賦任意類型的值,也可使其引用任意類型的對象。
因此 JS 被稱爲動態數據類型語言。
3. JS 是基於原型的編程風格,所謂類型也就是行爲方式上的共性。因爲每一個對象都具備共同的行爲方式,因此可使用原型對象。
1. 基本數據類型變量直接保存有數值等類型的數據值,而引用類型變量則保存有對象的引用。
1. 字符串的比較,JS 中有兩種等值運算符,即 === 和 ==。二者的區別在於,比較的時候是否會進行數據類型的轉換。=== 不會對數據類型進行轉換。
2. 字符串類 ( String 類 ), JS 中除了內建類型的字符串以外,還存在一個字符串類。大體至關於 Java 中數值型和包裝類型( Integer ) 的關係。
3. 字符串型和 String 類之間也一樣支持隱式類型轉換。
4. 字符串對象,可使用 new 運算符,來顯示的生成一個字符串對象。 var sobj = new String('abc');
5. == 會進行隱式的轉換。
6. 合理的運用字符串的隱式轉換。
7. 調用 String 函數
8. String 類的函數以及構造函數調用
1. JS 中全部的數值都是 浮點小數 。
2. 浮點數的一些例子
3. 相似於 String 類,JS 中也存在數值類 ( Number類 )
1. null 型只可以取 null 這一個值,null 值是一個字面量。
1. undefined 型只能取 undefined 這一個值。
1. 從字符串轉換成數值,一般的作法是使用 Number 函數、parseInt 函數、parseFloat 函數。
2. 字符串到數值的隱式數據類型轉換
3. ' + ' 號運算符在單目運算的狀況下則是正號運算,好比 +'100' 轉換成 數值 100
4. 慣用的數據類型轉換
5. boolean 的隱式類型轉換, 除了如下類型轉換後結果爲 false 值之外,其餘的都是 true
6. 使用雙重 !! 進行隱式轉換爲 boolean 類型。
7. Object 類型在被轉換爲布爾型以後結果一定爲 true
8. 經過函數調用方式得到的結果就再也不是 Object 類型,而是相應的內建類型了。
1. 習慣上,如下劃線( _ ) 開始的標識符被做爲 " 內部標識符 " 來使用, 好比: _calcNum, _name。
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. 表達式:即由運算符和操做數鏈接而成的式子。
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!!!