因為博主沒有系統的學習過前端基礎知識,所以打算讀一遍《JavaScript高階程式設計第三版》(以下簡稱“紅寶書”)。
為了更深刻地吸收知識,所以打算邊看邊記錄下知識點和一些自己的看法,並寫在這裡和大家一起探討探討~
紅寶書是一本很適合初級前端去看的書,第四版已經出了,然而因為窮(其實也因為不懂英文),還是選擇了第三版作為本次讀物。本讀書筆記按照書本的目錄順序進行記錄,書的前三章主要講的是 JavaScript 的起源簡介還有一些基本的概念,在這裡就先不贅述了,以後有機會一定補上。
第四章 變數、作用域和記憶體問題
基本型別和引用型別的值
- 基本型別 (原始型別 / Primitive values)
- String
- Number
- Boolean
- null
- undefined
- 引用型別 (物件型別 / Reference values)
擴充:實際上在 ES6 中引入了一種新的原始型別
Symbol
,表示獨一無二的值。是 JavaScript 語言的第七種資料型別。
在書中介紹,基本型別值指的是簡單的資料段,而引用型別值指那些可能由多個值構成的物件。
上述 String
, Number
, Boolean
, null
, undefined
這5種基本資料型別是按值訪問的,因為可以操作儲存在變數中的實際的值。
引用型別的值是儲存在記憶體中的物件,而 JavaScript 不允許直接訪問記憶體中的位置,也就是說不能直接操作物件的記憶體空間。在操作物件時,實際上是在操作物件的引用而不是實際的物件。因此,引用型別的值是按引用訪問的。
書中注:這種說法不嚴密,當複製儲存著物件的某個變數時,操作的是物件的引用。但在為物件新增屬性時,操作的是實際 的物件。——圖靈社群“壯壯的前端之路”注
動態的屬性
定義基本型別和引用型別的方式是類似的:建立一個變數併為該變數賦值。 但是,當這個值儲存到變數後,對不同型別值可以執行的操作則大相徑庭。對於引用型別的值,我們可以為其新增屬性和方法,也可以改變和刪除其屬性和方法。但我們不能給基本型別的值新增屬性,儘管這樣做不會導致任何錯誤。
var person = new Object();
person.name = 'Nick';
alert(person.name); // 'Nick'
複製程式碼
以上程式碼建立了一個物件並將其儲存在了變數 person
中。然後,我們為該物件新增了一個名為 name
的屬性,並將字串 "Nick" 賦值給了這個屬性。緊接著,又通過 alert()
函式訪問了這個新屬性。如果物件不被銷燬或者刪除,這個屬性會一直存在。
var name = 'Nicky';
name.age = 12;
alert(name.age); // undefined
複製程式碼
以上程式碼為字串 name
定義了一個名為 age
的屬性,並賦值為 12
,但在下一行訪問這個屬性時發現返回的是 undefinded
。這說明只能給引用型別動態地新增屬性,以便將來使用。
未完……