javascript語言精粹書籍學習
標識符
由一個字母開頭,可選擇性加上一個或多個字母、數字和下劃線。不能使用保留字。
被用於語句、變量、參數、屬性名、運算符和標記
數字
只有浮點數這一數字類型
值NaN時一個數值,標識不能產生正常結果的運算結果,不等於任何值,包括它自己
值Infinity,標識大於1.79769.。。。。。。。的值
字符串
JS的所有字符都是16位的,應爲Unicode是一個16位的字符集
字符串時不可變的,有一個length屬性
語句
一個編譯單元包含一組可執行的語句
表達式
最簡單的表達式時字面量值(比如字符串和數字)、變量、內置的值
以new爲前導的調用表達式、以delete前導的屬性存取表達式、包括圓括號
中的表達式、以一個前綴運算符作爲前導的表達式,或者表達式後面跟着。。。
字面量
對象字面量是一種方便指定新對象的表示法
屬性名可以是標識符或字符串
對象
對象是屬性的容器,每個屬性都擁有名字和值
JS中的對象是無類別的
JS包括一個原型鏈特性,允許對象繼承另一對象的屬性
對象字面量
提供了一種非常方便的創建新對象值的表示法
一個對象字面量就是包圍再一堆花括號中的0或多個“名/值”對
對象字面量可以出現在任何允許表達式出現的地方
檢索
[]
.
||運算符可以用來填充默認值
更新
被替換或者被擴充
引用
對象通過引用傳遞,永遠不會被拷貝
原型
每個對象都連接到一個原型對象,並且它可以從中繼承屬性
委託:如果想要的屬性完全不存在與原型鏈中國,結果就是undefined值
原型關係是一種動態關係,如果添加一個新的屬性到原型中,該屬性會立即對所有基於該原型創建的對象可見
反射
檢查對象並確定對象是什麼屬性
枚舉
for
for in
刪除
delete運算符可以用來刪除對象的屬性
減少全局變量污染
全局變量削弱了程序的靈活性
把多個全局變量都整理在一個名稱空間下
函數
函數對象
函數就是對象
每個函數創建時由兩個附加的隱藏屬性:函數的上下文和實現函數行爲的代碼
函數可以擁有方法
函數字面量
函數對象可以通過函數字面量創建
函數字面量由四個部分:保留字function,函數名,包圍在圓括號中的一組參數,包圍在花括號中的一組語句
函數字面量可以出現在任何允許表達式出現的地方
調用
調用一個函數將暫停當前函數的執行,傳遞控制權和參數給新韓淑
除了形參,每個函數接收兩個附加的參數:this和arguments.this取決於調用模式
JS中有四種調用模式:方法調用模式,函數調用模式,構造器調用模式和apply調用模式
這些模式在如何初始化this上存在差異
調用運算符:跟在任何一個產生函數值的表達式之後的一堆圓括號。實參多了,忽略;實參少了,undefined。對參數值不會進行類型檢查
方法調用模式
一個方法:當一個函數被保存爲對象的一個屬性時
如果一個調用表達式包含一個屬性存取表達式(一個.表達式或[]下標表達式)
通過this可取得它們所屬對象的上下文的方法成爲公共方法
函數調用模式
當一個函數並非一個對象的屬性時,那麼它被當作一個函數來調用
在外部定義一個函數,賦值給this,this爲全局對象
內部函數調用時不能共享該方法對對象的訪問權,可以在函數內部定義that指向this
構造器調用模式
原型繼承:對象可以直接從其他對象那裏繼承屬性
結合new前綴調用的函數被稱爲構造器函數
apply調用模式
apply方法構建一個參數數組並用其取調用函數
apply方法接受兩個參數,第一個時綁定給this的值,第二個就是一個參數數組
參數
函數被調用時,可以得到一個arguments數組,arguments不是一個真正的數組,是一個類似數組的對象
返回
一個函數總是會返回一個值,如果沒有指定值,返回undefined
如果函數前面加上new方式調用,且返回值不是一個對象,則返回this(該新對象)
異常
異常時干擾程序的正常流程的非正常的事故
throw語句中斷函數的執行
給類型增加方法
JS允許給語言的基本類型增加方法
基本類型的原型時公共的結構
遞歸
遞歸函數會直接或間接的調用自身的函數
作用域
作用域控制者變量與參數的可見性和生命週期
閉包
該函數可以訪問它被創建時的上下文環境
作用域的好處是內部函數可以訪問定義他們的外部函數的參數和變量
內部函數擁有比它的外部函數更長的生命週期
閉包函數:聲明在一個函數中的函數
內部函數總是可以訪問其所在的外部函數中聲明的參數和變量,即使在其外部函數被返回了之後
回調
函數可以讓不連續事件的處理變得更容易
發送異步的請求,提供一個當服務器的響應到達時將被調用的回調函數。異步函數立即返回,客戶端不會阻塞
模塊
模塊:一個提供接口卻隱藏狀態與實現的函數或對象
模塊模式利用了函數作用域和閉包來創建和綁定對象與私有成員的關聯
模塊模式的一般形式:一個定義了私有變量和函數的函數;利用閉包創建可以訪問私有變量和函數的特權函數;最後返回這個特權函數,或者把它們保存到一個可訪問到的地方
模塊模式可以代替全局變量的使用
級聯
有一些方法沒有返回值,讓這些方法返回this而不是undefined,可以啓用級聯。一個級聯中,可以在單獨一條的語句中依次調用同一個對象的很多種方法
套用
套用允許我們將函數與傳遞給它的參數相結合去產生一個新的函數
記憶
函數可以用對象去記住先前操作的結果