課堂筆記 2021.8.27 JS基礎 下
JS基礎 下
JS原始型別 (3)
Symbol ES6及之後的版本中引入的新原始資料型別。Symbol可以建立唯一標識。
作為物件的key
Symbol.for
Symbol.keyFor //得到一個物件的key
const id = Symbol('foo'); //建立的是區域性的Symbol,區域性的Symbol即使傳同樣的key,它們之間也不會相等。
而const foo = Symbol.for(foobar); //建立的是全域性的Symbol
私有屬性,新的語言標準中private field有些不理想,所以也可以採用Symbol來定義私有屬性。
內建Symbol,ES6內建了一些有用的Symbol,可以用來控制物件的一些內部行為
Symbol.iteratior
Symbol.toPrimitive
Symbol.toStringTag
BigInt,是JavaScript新的原始型別,可以精確表示大於2^53-1的整數
BigInt字面量:數字+n
BigInt運算:不能與Number直接進行運算
顯式型別轉換:BigInt與Number相互轉換
JS函式(1)
通過function關鍵字可以宣告一個函式。
函式宣告沒有塊級作用域
函式宣告會被提升(hoist)
函式表示式,可以將函式作為物件使用
函式表示式不會被提升(hoist)
函式表示式可以具名也可以匿名
函式表示式具名只能在內部訪問
箭頭函式,函式表示式的簡寫
單行的箭頭函式可以省略花括號和return
只有一個引數的箭頭函式可以省略圓括號
箭頭函式不能具名,也沒有this上下文
執行上下文(閉包),函式由執行上下文,執行時會產生“閉包”
閉包是執行時由函式呼叫產生的
通過閉包可訪問執行上下文中的資料
如果產生閉包的引用被銷燬,閉包被銷燬
總結
函式宣告無塊級作用域,存在hoist
函式表示式可具名或匿名,具名只能內部使用
箭頭函式是函式表示式簡寫
函式由執行上下文,執行時會產生“閉包”
JS函式(2)
this上下文
動態繫結
Function類
this上下文
在函式體內部,可以通過this物件訪問函式呼叫this上下文。所謂函式呼叫的this上下文,是指函式的實際呼叫者物件。
setTimeout是直接呼叫sayHelloTo,而沒有通過person去呼叫,所以函式拿不到person中this.lastName這個東西,所以出現了undefined
箭頭函式
箭頭函式沒有this上下文,利用這一特性,可以讓箭頭函式訪問外部作用域的this上下文。
動態繫結
this上下文在函式呼叫時可以動態指定,方法是通過函式的call、apply或bind方法來呼叫。
Function類
函式是Function類的例項,我們可以用Function類動態建立函式物件。
總結
函式的this上下文預設是它的實際呼叫者
箭頭函式沒有this上下文,所以可以訪問外部的this
我們可以通過call、apply、bind動態繫結
函式是Function類的例項,可以動態建立
JS物件(1)
構造
物件是最基礎的複合型別,它是一組屬性的集合。物件有幾種構造方式。
通過字面量構造
通過構造器構造
通過原型構造
構造器與類
JavaScript是面向物件的程式語言,物件預設的構造器是Object,我們可以定義函式作為構造器或者定義class。
總結
物件構造:字面量、構造器、原型
函式構造器與class
屬性定義:識別符號、字串、表示式
屬性訪問:. 和 [ ]
屬性的遍歷和增改刪
原型機制
原型鏈和類繼承
JS物件(2)