《JavaScript二十年》閱讀整理

李大雷發表於2023-01-31

前言

春節假期因為沒有win電腦回家,所以才有時間靜下心來看會兒書。這次讀的是《JavaScript二十年》,書籍主要介紹了語言誕生以及一些階段性的發展里程碑,能學到的有用知識不會太多,如果你還沒看過紅寶書或者《你不知道JavaScript》等系列書籍,建議先看完再來讀這本比較”閒“的書。

下面我會以我個人的理解角度概括一下書籍的一些主要內容,給一些想看沒時間看的兄弟節省一下時間。

1. 語言誕生

90年代初,網際網路崛起了,瀏覽器出現在大眾視野了,大家開始衝浪了。Netscape,也就是網景,在此時創立,很顯然大家都想要撈一筆大的。

此時,Web核心還是HTML,但是此時大家都對可以方便編排使用者應用操作的指令碼語言有了極大的期待,於是,網景招了Brendan Eich進來(為了方便國人理解,後文用老E代替Brendan Eich),讓他開發一款可以整合到網頁裡的指令碼語言。

恰恰好在這個時候,萬物起源 Java 出來了,Java的開發公司Sun和網景達成了協議,決定將Java整合到瀏覽器中。於是,網景老闆現在的戰略目標就變了,他們可能只需要一門[小語言]來補充一下Java就可以了。

此時,網景內部還是有很多不同的聲音,主要是:

  1. 他媽的Java到底行不行?
  2. 為什麼要兩門語言,直接Java不就完了,還小語言補充是瞧誰不起?
  3. 誰他媽來開發這門小語言,有沒有大佬,線上等,很急

對於第一個問題,當時還是95年的春天,年輕的Java對於初學者來說還是相當難上手的,所以,從多方面考慮,被我們寄予厚望的Java 最終還是倒在了16強!

對於第二個問題,他們對標了當時的競品,微軟,他們也是出售Visual C++給專業選手,然後使用 Visual Basic來作為補充的指令碼語言,給一些菜雞做一些[膠合]定製。這個想法很不錯,所以網景也抄了。

那麼就剩下第三個問題了,很顯然,此時需要我們的主角老E登場了。他花了10多天(是的,書裡是這麼寫的,你現在是不是覺得自己像個沙比?)來建立了一門叫做Mocha的新語言,證明這門語言在網景瀏覽器中的可行性。95年12月的時候,正式命名為JavaScript釋出,通稿中 JavaScript 被描述為「一種物件指令碼語言」,可用於編寫指令碼來動態地「修改 Java 物件的屬性和行為」。它將作為「Java 的補充,方便進行線上應用開發」。儘管它們的技術設計只有表面上的相似,網景和Sun還是試圖在 Java 和 JavaScript 語言間建立牢固的品牌聯絡。這種名稱上的相似性及其帶來的兩種語言具備密切聯絡的暗示,長期以來都是導致混亂的根源之一。

眾所周知,程式設計師最精通的,還是CV,所以老E在一開始的設計中,借鑑了許多其他語言的特點。

  • 比如Lisp 式的函式一等公民概念
  • 比如從Java借鑑的 null 概念,本質上是表達「沒有物件」的物件,也是後來一個經典Bug之一
  • 比如從C借鑑的條件語句,迴圈語句和非順序控制流的 breakcontinue和 return語句
根據 Brendan Eich 的回憶,typeof null的值是原始 Mocha 實現中抽象洩漏g的結果。null的執行時值使用了與物件值相同的內部標記值進行編碼,因此 typeof運算子的實現就直接返回了 "object"

2. 創立標準

儘管作者是一個天才,但是10天趕工出來的新語言還是有很多的問題。

JavaScript釋出後的第二年,微軟也宣佈在IE上支援這個語言,同時他們也開始了JScript的開發工作,為什麼名字不一樣,你想想啊,網景肯定不會把程式碼給微軟啊,所以他們只是在各自瀏覽器上實現了一樣的邏輯,並且相容一樣的指令碼程式碼,網景的叫做JavaScript ,微軟這邊就叫JScript 。每當微軟對比兩個瀏覽器時發現相同指令碼具有差異,他們就要對JavaScript做逆向工程,看看這些人底層寫的什麼垃圾實現,為什麼不同瀏覽器會有不同的實現。(這個同程式碼不同瀏覽器下表現不同的經典尿性也一直延續至今)

在整個JScript 的開發過程中,微軟的人一旦發現JavaScript 的語言規範缺失,就瘋狂Diss網景的哥們。

JavaScript風評拉胯,[ 創立一個標準,確保在不同瀏覽器中的相容性 ]變得越來越重要。

於是,網景透過人際關係找到了ECMA國際組織的秘書長,跟他提議推動JavaScript的標準化。由於國際標準組織(ISO)認可ECMAECMA的標準可以透過快速通道來成為ISO標準。

96年10月,ECMA邀請所有風雲人物(基本是網景和微軟的員工)到場共同參與JavaScript的討論,並且組成一個新的Ecma技術委員會(Technical Committee)。

ECMA使用數字來標記旗下的技術委員會,而下一個可用的數字是39,所以這次組織會議就是經典的TC39會議

會議開始,兩派人馬輪番演講,最終委員會採用了微軟員工Robert Welland編寫的文件,網景確實拉了跨了,還不如繼承者。這份文件是利用了虛擬碼的概念來進行編寫的,這種方式在描述JavaScript的語義方面相當有效,其詳細程度足以確保互操作性。

所以,ECMAScriptJavaScript的關係是什麼?前者是後者的規範,後者是前者的一個實現。比如前者描述了內建方法A,應該實現什麼邏輯,什麼型別入參和什麼型別的返回結果。那麼不同的瀏覽器廠商就要實現這一套邏輯,給自己的 不管是JavaScript 還是 JSCript ,又或者是什麼BScript,都要有這個內建方法A,並且使用方法符合ECMAScript的定義。


Ogay,先寫到這裡了,後面還沒整理完,明天再更

3. 改革失敗

4. 繼往開來