天天看點

怎麼了解 JS 基本引用類型?

JavaScript 進階程式設計第 4 版(後簡稱高程4),相較于第 3 版,增加了 ES6 至 ES10 的全新内容,删除了舊版過時的内容,并在原有基礎上充實了更加翔實的内容。

中文譯版于 2020 年發售,妥妥的“新鮮出爐”,你要是問本瓜:當今學 JavaScript 哪家強,我隻能說:紅寶書第 4 版最在行。

怎麼了解 JS 基本引用類型?

于是乎,借着更文契機,本瓜将開啟一個小系列,帶你重看一遍進階程式設計4(先前隻是跳着跳着看),将抽取精華,用最簡單的話解釋核心點、盡量把握全局、快速過一遍的同時,記錄與工友們分享~~

正文

第五章 —— 基本引用類型,這是本瓜最不了解的 JavaScript 文法設定之一!

為什麼已經有了::Boolean、Number 和 String 基本類型,還要來一個::Boolean、Number 和 String 原始值包裝類型??

let s1 = "some text";
s1.color = "red";
console.log(s1.color); // undefined

let s1 = new String("some text");
s1.color = "red";
console.log(s1.color); // red      

神不神奇?

這樣做的目的就是:讓原始值擁有對象的行為。。。

let falseValue = false
result = falseValue && true
console.log(result) // false

let falseObject = new Boolean(false);
console.log(falseObject) // Boolean {false}
console.log(falseObject&&true) // true      

是以,一切通過 new 關鍵字建立的,都是對象!!

對象被認為是某個特定引用類型的執行個體。新對象通過使用 new 操作符後跟一個構造函數(constructor)來建立。構造函數就是用來建立新對象的函數;

上面的 String()、Boolean() 都是構造函數,都是用來構造引用類型的對象的!!

以下代碼可以充分說明以上觀點:

let s1 = new String("some text")
console.log(s1.__proto__===String.prototype) //true      
let s1 = new String("some text")
let s2 = s1
s1.color='red'
console.log(s2) // String {'some text', color: 'red'}

let s1 = "txt"
let s2 = s1
s1='red'
console.log(s2) // txt      

書歸正傳,Date()、RegExp() 自帶的引用類型構造函數就不多說了,有機會專題寫寫;

5.4 講到:單例内置對象:Global、Math

具體使用,就不展開了;

需要強調的是:當代碼開始執行時,全局上下文中會存在兩個内置對象:Global 和 Math。其中,Global 對象在大多數 ECMAScript 實作中無法直接通路。不過,浏覽器将其實作為 window 對象。所有全局變量函數都是 Global 對象的屬性。Math 對象包含輔助完成複雜計算的屬性和方法。

小結

此一章,最有意思的,還是對于:原始值包裝類型 的了解;

JavaScript 可以實作面向對象程式設計,但是它實際上是沒有“類”的,我們通過構造函數來實力對象,其實是變相在實作“類”的繼承能力;至于具體的實作,包括原型鍊這些,後面再聊。

繼續閱讀