JavaScript 進階程式設計第 4 版(後簡稱高程4),相較于第 3 版,增加了 ES6 至 ES10 的全新内容,删除了舊版過時的内容,并在原有基礎上充實了更加翔實的内容。
中文譯版于 2020 年發售,妥妥的“新鮮出爐”,你要是問本瓜:當今學 JavaScript 哪家強,我隻能說:紅寶書第 4 版最在行。
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIwUzNfdHLkVGepZ2XtxSZ6l2clJ3LcBnYldHL0FWby9mZvwFL9s2RkBnVHFmb1clWvB3MaVnRtp1XlBXe0xCMy81dvRWYoNHLwEzX5xCMx8FesU2cfdGLwMzX0xiRGZkRGZ0Xy9GbvNGLpZTY1EmMZVDUSFTU4VFRR9Fd4VGdsQTMfVmepNHLrJXYtJXZ0F2dvwVZnFWbp1zczV2YvJHctM3cv1Ce-cWZwpmLwM2MyQGN0EWMlZDZjF2NkFjMzMjMiBDM2IWNmlTMxUDM5IzNyY2LcZDMyIDMy8CXzV2Zh1WavwVbvNmLvR3YxUjLyM3Lc9CX6MHc0RHaiojIsJye.jpeg)
于是乎,借着更文契機,本瓜将開啟一個小系列,帶你重看一遍進階程式設計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 可以實作面向對象程式設計,但是它實際上是沒有“類”的,我們通過構造函數來實力對象,其實是變相在實作“類”的繼承能力;至于具體的實作,包括原型鍊這些,後面再聊。