前言:
# 大致花了一個星期的時間把這本書認真看了半本,下面是我做的閱讀筆記,希望能讓看這本書的人有個大致的參考。目前可能寫得較亂不夠全面,後續我會整理添加。 (2017-7-17)
3.1.語法
區分大小寫
#標識符(建議用駝峰大小寫myCar)
註解// /**/
嚴格模式(use strict)
語句 建議var diff-a-b;要用分號,以及 if( test ) { alert(test); }一句話也要用{}
#
3.2 關鍵字和保留字
3.3 變數
未初始化undefined var message = “hi”; message = 100; 型別隨便換
Function test(){ Var a = “hi”; 局部 b = “hi”; 全局 }
Test(); alert(a); 錯誤 alert(b); hi
3.4 資料類型
typeof
Undefined (定義但未被賦值)
Null(空物件指標)
Boolean(布林值true false 流程控制語句會自動執行對應boolean 轉換)
Number
(八進位0 十進位 十六進位0x 浮點數值數值範圍NaN 數值轉換Number parseInt )
String(字串,單雙引號沒區別,轉義序列,字串特點,toString String)
Object(對象所有物件的基礎var o = new Object();)
函數在ES是對象,不是一種資料型別。
3.5運算子
#一元運算子 ++ -- 、 + -(可用來轉換資料型別)
#
位元運算子 位元非~num1 位元與& 位元或##| 位元異或^ 左移<< 右移>> 無符號右移>>
#布林運算子 ! && || 乘運算子* / % 加性運算子##+ - 關係運算子< > <= >=
##相等運算子
== != === !==條件運算子? :
賦值運算子
= *= /= %= += -= <<= >>= > >=逗號運算子 3.6
語句
# 3.7
函數
arguments
沒有重載##
#第四章變數、作用域與記憶體問題
動態的屬性 (
引用型別能動態地加入屬性)複製變數值 (
基本型別是不同的空間,參考類型是引用相同的空間)傳遞參數 (
相同) # 偵測類型 (typeof instanceof) # 4.2執行環境與作用域 #作用域鏈結 延長作用域鏈結(try-catch with) 沒有區塊層級作用域(if for 宣告變數查詢識別碼) 4.3垃圾收集 策略(標記清除引用計數) 效能問題 管理記憶體 # 5.1 Object類型 Var person = {};(適合給函數傳入大量參數) var parson = new Object(); # Person[“name”](使用變數來代表屬性時用) person.name(推薦) # #5.2 Array 類型 Var colors = new Array(); var colors = Array(); var colors =[*****]; Colors[*] = *****; colors.length 偵測陣列: instanceof Array.isArray() 轉換法: toString() valueOf() toLocaleString() join()
##家字家方法:
##' ## push() pop() #佇列方法: shift() unshift() #重新排序方法: reverse() sort( concat()原沒變新增 slice() 原變了可刪除可添 位置方法: indexOf() lastIndexOf() #迭代方法:every() filter() forEach() map() some() # reduce() reduceRight() 5.3 Date New Date() 裡面 parse(“May 25,2004”) UTC(2005,0) Date.now() RegExp實例方法:exec() 擷取群組(擷取多組符合項目) text() 一次看是否符合 RegExp建構子屬性:有點多,用來看最近一次符合的相關訊息 模式的限制:缺少某些語言(Perl)所支援的高階正規表示式特性,但是絕大多數情況夠用 5.5 Function類型 函數是物件(也是#Function#的實例),函數名稱是指標。 function sum(num1,num2) { } Var sum = function(num1,num2){ }; 沒有重載:函數是對象,函數名稱是指標。 函數宣告與函數表達式:function ******* 函數宣告提升 var sum = ** ***** 不會提升 函數內部屬性:arguments物件# (屬性callee指向函數) this物件( #指向函數執行的環境物件) 屬性caller (指向呼叫目前函數的函數,如果是全域作用域的函數則值為null) 函數屬性與方法: # 屬性(length宣告參數個數 prototype繼承) 非繼承方法: call( ) apply() bind() a.apply( b, c); a.call( b, d ); '
盤'> b a ,順便給a傳入參數c( argument ) # Var a = b.bind(c); a 是在c 5.6基本包裝類型:# Boolean 1.字元方法:charAt()或string[] 傳回對應字元 #charCodeAt() 傳回對應字元編碼 2.字串操作方法: 或+運算子和陣列的concat()#看起來一樣 截斷字串,三個很靈活 字串位置方法:indexOf( ) lastIndexOf() 方法 刪除前置及後綴的所有空格 trimLeft() trimRight() 經典方法 特定地區 這種更穩健 和RegExp的exec()本質一樣傳回符合到字串的陣列 傳回第一個符合項目的索引否則回傳-1 符合且取代字串 符合分隔符號產生陣列 比較兩個字串 靜態方法 將多個字元編碼變成字串 方法 例如big() string #凱希; 單體內建物件 物件 編碼方法: encodeURI() 整個 encodeURIComponent() 某一段 編碼 decodeURI() 整個 某一段 # eval()方法 非常強大且非常危險 #Global 物件的屬性 undefined、 ##都是屬性 Web瀏覽器是將全域物件作為window 物件的 物件 物件的屬性 一些特殊值例如π 方法 #捨去方法:小數值變整數 Math.ceil(25) 進一 Math.floor(25) 退一 #Math.round(25) 四捨五入 #random()方法 [0,1) 之間的隨機數字 其它方法 太多看書 #6.1理解物件 # 6.1.1屬性類型: #資料屬性:4個特性 存取器屬性:不包含資料值 4個特性透過Object.defineProperty()##定義 6.1.2 Object.defineProperties() 可以是資料屬性,也可以是存取器屬性。 6.1.3 Object.getOwnPropertyDescriptor()## 建立物件 工廠模式 (
# #看書)
6.2.2建構子模式(看書
new constructor ) #6.2.3原型模式: 原型與 運算子( in for-in ) ## 3. ( ) 4. ( ) 5.原生物件的原型( 就是用原型模式,可以定義新方法在裡面,但不推薦#) # 6.原型物件的問題:沒有屬於實例自己的屬性 6.2.4 6.2.7穩健建構函數模式 #跟寄生建構子模式有類似處,但不用this和new。 instanceof也偵測不出 6.3繼承
# 6.3.1 1. Object 2. instanceof isPrototypeOf() 3.謹慎地定義方法:必須在實例替換原型之後才能定義新的方法。 4.原型鏈的問題: 原型外的屬性也給了繼承 #在創造子類型的實例時,不能傳遞參數給超類型的建構子。 很少是單獨使用。 6.3.2 call或 也很少單獨使用。 6.3.3 # 原型鏈實作 原型屬性和方法的繼承 對實例屬性的繼承## ##6.3.4原型式繼承(看書) 沒有用到建構子 保持型別可以用,但是會跟原型模式一樣共用參考型別的屬性。 6.3.5 #(看書#) #6.3.6 #第七章 函數表達式 7.1遞迴 嚴格模式不能用 arguments.callee 可以用命名函數表達式。 7.2閉包:有權存取另一個函數作用域中的變數的函數 自我總結:閉包是函數,一般用匿名函數 #1.閉包可以存取傳回外部函數中的變數。 2.另一個函數的活動物件會被保存,直到閉包的作用域連結被銷毀。 7.2.1閉包與變數 例如在for迴圈中,則會出現不如意的情況。 關於this物件
##。 this 7.2.3記憶體洩漏 # 使用閉包,確保正常回收記憶體 7.3 用匿名自執行函數來模仿。 自我總結作用: #1.內部執行完就會被摧毀。 2.匿名自執行函數可以減少污染全域方法和屬性。 閉包就有一個記憶體的問題,用這個結合很舒適。 7.4私有變數 物件上的都是公有的 ( # 在建構子中建立 -------- 建構子 #this.****** = function(){ **** }; 增進了程式碼的重複使用性,但是每個實例沒有自己的私有變數。 (因為這個叫靜態私有變數) 使用實例變數,還是靜態私有變數,看特定需求。 7.4.2模組模式 字面量 一個實例物件 ( ) 在匿名函數內部定義私有變數和方法,然後將一個物件字面量作為函數的回傳值。 7.4.3 必須是某種類型的實例,同時也必須加入某些屬性或方法。 第五章 #參考類型
第六章 #物件導向的程式設計
(閱讀)##
組合繼承有問題:呼叫了兩次超類型的建構函數,導致實例和原型中重複了屬性。 寄生組合式繼承解決了這個問題,成為了最理想的繼承範式。
以上是JavaScript高階程式設計介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!