理解JavaScript使用語言中最棘手的部分的過程是很重要的。讓我們從這一切開始。

為什么需要
JavaScript這樣的語言?
許多年前,早在1995年,就有一個(gè)名為Netscape Navigator的瀏覽器(聽起來已經(jīng)是個(gè)故事了)?;ヂ?lián)網(wǎng)連接非常緩慢,因?yàn)槿藗冞^去使用撥號(hào)連接使用電話線和調(diào)制解調(diào)器。因此,當(dāng)您要在網(wǎng)站上填寫表單時(shí),通常使用Perl這樣的語言進(jìn)行編碼,任何表單的輸入字段的驗(yàn)證都需要往返到服務(wù)器。
這不僅是一個(gè)痛苦的練習(xí),因?yàn)榛ヂ?lián)網(wǎng)的速度非常緩慢,而且還導(dǎo)致數(shù)據(jù)丟失,如果表格沒有正確填寫。Netscape Navigator試圖通過找到一種方法來驗(yàn)證客戶端本身的輸入字段,從而將完整的輸入字段保存到服務(wù)器上,從而解決這個(gè)問題。JavaScript就是這樣誕生的,只是作為一種腳本語言在客戶端驗(yàn)證表單。
為什么了解JavaScript的歷史很重要
JavaScript作為一種腳本語言誕生了,用來驗(yàn)證輸入,它已經(jīng)走過了成為一種成熟的編程語言的旅程,它可以用來構(gòu)建從移動(dòng)應(yīng)用程序、web應(yīng)用程序到甚至桌面應(yīng)用程序的任何東西。由于它的發(fā)展方式,我想說它是一種編程語言,它可能需要幾個(gè)小時(shí)的時(shí)間才能開始,但需要多年的時(shí)間才能掌握。因此,當(dāng)您開始學(xué)習(xí)JavaScript時(shí),了解它的歷史將有助于您更好地理解它的本質(zhì)、優(yōu)點(diǎn)和局限性。一旦了解JavaScript是如何演變成一種語言的,就更容易理解為什么會(huì)存在一些繼承的問題,以及為什么有些事情會(huì)以某種方式發(fā)生變化。
JavaScript的誕生與沖突的產(chǎn)生
BrendanEich(當(dāng)時(shí)是Netscape Navigator的開發(fā)人員)被指派開發(fā)這種新的腳本語言,然后命名為Mocha。這將作為Netscape Navigator 2的一部分發(fā)布。Mocha后來在Netscape Navigator 2發(fā)布之前被重命名為L(zhǎng)iveScript。Netscape通信公司隨后與Sun Microsystems結(jié)成聯(lián)盟,后者當(dāng)時(shí)正在大力推動(dòng)Java的發(fā)展。
Just before the launch LiveScript was renamedasJavaScripttobank upon the traction that Java was gettingfromthe pressandportray JavaScriptasa natural extensionofJava.
因?yàn)镴ava對(duì)于處理服務(wù)器端任務(wù)來說太復(fù)雜了,太大了,LiveScript被看作是Java處理客戶端任務(wù)的自然擴(kuò)展。這應(yīng)該是Java的一個(gè)伙伴,Java將處理繁重的服務(wù)器端任務(wù),而LiveScript將使客戶端驗(yàn)證變得容易。由于這些明顯的原因,LiveScript繼承了Java的許多語法和特性。Sun Microsystems幫助Netscape Navigator 2完成并發(fā)布了LiveScript,就在發(fā)布之前,它被重新命名為JavaScript,以利用Java從媒體獲得的牽引力,并將JavaScript描述為Java的自然擴(kuò)展。
沖突的演變與瀏覽器不兼容
JavaScript1.0是一個(gè)巨大的成功,互聯(lián)網(wǎng)的采用也在大幅增加。因此JavaScript1.1與Netscape Navigator 3一起發(fā)布。到目前為止,Netscape Navigator已經(jīng)成為市場(chǎng)上領(lǐng)先的瀏覽器。此時(shí),微軟決定在自己的瀏覽器InternetExplorer 3的開發(fā)中注入更多的資源。Netscape Navigator 3推出后不久,Microsft發(fā)布了一個(gè)新版本的Web瀏覽器,名為InternetExplorer 3,實(shí)現(xiàn)了JavaScript。為了避免Netscape Communications的任何許可問題,Microsft將Javascript的實(shí)現(xiàn)改名為JScript。
微軟對(duì)JScript的這種采用和積極的實(shí)現(xiàn)將被證明是JavaScript的一個(gè)重大飛躍。因此,到目前為止,有兩個(gè)不同版本的JavaScript漂浮在一起,沒有標(biāo)準(zhǔn)化。這是我們今天看到的瀏覽器不兼容的開始。與C、C++、Java等所有其他編程語言不同,JavaScript沒有任何基本標(biāo)準(zhǔn)。
向ECMA提交標(biāo)準(zhǔn)化文件
由于JavaScript沒有標(biāo)準(zhǔn),而且業(yè)界對(duì)此越來越擔(dān)心,因此JavaScript1.1于1997年提交給歐洲計(jì)算機(jī)制造商協(xié)會(huì)(ECMA)進(jìn)行標(biāo)準(zhǔn)化。成立了一個(gè)技術(shù)委員會(huì),目的是標(biāo)準(zhǔn)化通用、跨平臺(tái)和與供應(yīng)商無關(guān)的腳本語言的語法和語義。該委員會(huì)由Sun Microsystems、Netscape Communications、Microsft和其他各種公司的開發(fā)人員組成。他們提出了ECMA-262標(biāo)準(zhǔn),定義了一種新的腳本語言和一種叫做ECMAScript的通用腳本語言,所有瀏覽器都必須遵守ECMAScript來創(chuàng)建自己的JavaScript實(shí)現(xiàn)。不同的瀏覽器嘗試采用ECMAScript作為JavaScript實(shí)現(xiàn)的標(biāo)準(zhǔn),取得了不同程度的成功。在采用這一標(biāo)準(zhǔn)的整個(gè)過程中,既有成功的經(jīng)歷,也有失敗的經(jīng)歷。
那么JavaScript和ECMAScript是一回事嗎?
答案是不!雖然您經(jīng)常會(huì)聽到開發(fā)人員使用它們的同義詞,但是它們之間有很大的不同。ECMAScript是一種基于ECMA-262中定義的標(biāo)準(zhǔn)的腳本語言,不與Web瀏覽器綁定。基于ECMAScript構(gòu)建了一種更健壯的腳本語言,比如JavaScript。
JavaScript的實(shí)現(xiàn)
ECMAScript的JavaScript實(shí)現(xiàn)有三個(gè)區(qū)部分,統(tǒng)稱為JavaScript。
核心-這是以ECMAScript為基礎(chǔ)的。因此,ECMAScript定義了語法、數(shù)據(jù)類型、語句、運(yùn)算符等。
文檔對(duì)象模型(DOM)-瀏覽器呈現(xiàn)為向客戶端或用戶顯示的節(jié)點(diǎn)層次結(jié)構(gòu)。
瀏覽器對(duì)象模型(BOM)-這就是開發(fā)者可以操縱瀏覽器窗口的地方。使用BOM,開發(fā)人員可以訪問瀏覽器特性,并在DOM上下文或正在呈現(xiàn)的頁面之外對(duì)它們進(jìn)行操作。
接下來是什么?
理解JavaScript的三種不同實(shí)現(xiàn)及其歷史是很重要的,以了解它在一段時(shí)間內(nèi)是如何影響到語言的。在本系列文章中,我們接下來將討論ES6,這是2015年發(fā)布的ECMA-262的第六版,以及它如何被證明是JavaScript最重要的增強(qiáng)。