理解JavaScript使用語(yǔ)言中最棘手的部分的過(guò)程是很重要的。讓我們從這一切開始奈虾。
為什么需要
JavaScript這樣的語(yǔ)言夺谁?
許多年前,早在1995年愚墓,就有一個(gè)名為Netscape Navigator的瀏覽器(聽起來(lái)已經(jīng)是個(gè)故事了)予权“好悖互聯(lián)網(wǎng)連接非常緩慢浪册,因?yàn)槿藗冞^(guò)去使用撥號(hào)連接使用電話線和調(diào)制解調(diào)器。因此岗照,當(dāng)您要在網(wǎng)站上填寫表單時(shí)村象,通常使用Perl這樣的語(yǔ)言進(jìn)行編碼,任何表單的輸入字段的驗(yàn)證都需要往返到服務(wù)器攒至。
這不僅是一個(gè)痛苦的練習(xí)厚者,因?yàn)榛ヂ?lián)網(wǎng)的速度非常緩慢,而且還導(dǎo)致數(shù)據(jù)丟失迫吐,如果表格沒(méi)有正確填寫库菲。Netscape Navigator試圖通過(guò)找到一種方法來(lái)驗(yàn)證客戶端本身的輸入字段,從而將完整的輸入字段保存到服務(wù)器上志膀,從而解決這個(gè)問(wèn)題熙宇。JavaScript就是這樣誕生的,只是作為一種腳本語(yǔ)言在客戶端驗(yàn)證表單溉浙。
為什么了解JavaScript的歷史很重要
JavaScript作為一種腳本語(yǔ)言誕生了烫止,用來(lái)驗(yàn)證輸入,它已經(jīng)走過(guò)了成為一種成熟的編程語(yǔ)言的旅程戳稽,它可以用來(lái)構(gòu)建從移動(dòng)應(yīng)用程序馆蠕、web應(yīng)用程序到甚至桌面應(yīng)用程序的任何東西。由于它的發(fā)展方式,我想說(shuō)它是一種編程語(yǔ)言互躬,它可能需要幾個(gè)小時(shí)的時(shí)間才能開始播赁,但需要多年的時(shí)間才能掌握。因此吼渡,當(dāng)您開始學(xué)習(xí)JavaScript時(shí)行拢,了解它的歷史將有助于您更好地理解它的本質(zhì)、優(yōu)點(diǎn)和局限性诞吱。一旦了解JavaScript是如何演變成一種語(yǔ)言的舟奠,就更容易理解為什么會(huì)存在一些繼承的問(wèn)題,以及為什么有些事情會(huì)以某種方式發(fā)生變化房维。
JavaScript的誕生與沖突的產(chǎn)生
BrendanEich(當(dāng)時(shí)是Netscape Navigator的開發(fā)人員)被指派開發(fā)這種新的腳本語(yǔ)言沼瘫,然后命名為Mocha。這將作為Netscape Navigator 2的一部分發(fā)布咙俩。Mocha后來(lái)在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ù)來(lái)說(shuō)太復(fù)雜了膜蛔,太大了,LiveScript被看作是Java處理客戶端任務(wù)的自然擴(kuò)展脖阵。這應(yīng)該是Java的一個(gè)伙伴皂股,Java將處理繁重的服務(wù)器端任務(wù),而LiveScript將使客戶端驗(yàn)證變得容易命黔。由于這些明顯的原因呜呐,LiveScript繼承了Java的許多語(yǔ)法和特性矾兜。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的任何許可問(wèn)題刘陶,Microsft將Javascript的實(shí)現(xiàn)改名為JScript胳赌。
微軟對(duì)JScript的這種采用和積極的實(shí)現(xiàn)將被證明是JavaScript的一個(gè)重大飛躍。因此匙隔,到目前為止疑苫,有兩個(gè)不同版本的JavaScript漂浮在一起,沒(méi)有標(biāo)準(zhǔn)化纷责。這是我們今天看到的瀏覽器不兼容的開始捍掺。與C、C++再膳、Java等所有其他編程語(yǔ)言不同挺勿,JavaScript沒(méi)有任何基本標(biāo)準(zhǔn)。
向ECMA提交標(biāo)準(zhǔn)化文件
由于JavaScript沒(méi)有標(biāo)準(zhǔn)喂柒,而且業(yè)界對(duì)此越來(lái)越擔(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)商無(wú)關(guān)的腳本語(yǔ)言的語(yǔ)法和語(yǔ)義。該委員會(huì)由Sun Microsystems艳吠、Netscape Communications麦备、Microsft和其他各種公司的開發(fā)人員組成。他們提出了ECMA-262標(biāo)準(zhǔn)讲竿,定義了一種新的腳本語(yǔ)言和一種叫做ECMAScript的通用腳本語(yǔ)言泥兰,所有瀏覽器都必須遵守ECMAScript來(lái)創(chuàng)建自己的JavaScript實(shí)現(xiàn)弄屡。不同的瀏覽器嘗試采用ECMAScript作為JavaScript實(shí)現(xiàn)的標(biāo)準(zhǔn),取得了不同程度的成功膀捷。在采用這一標(biāo)準(zhǔn)的整個(gè)過(guò)程中迈嘹,既有成功的經(jīng)歷,也有失敗的經(jīng)歷全庸。
那么JavaScript和ECMAScript是一回事嗎秀仲?
答案是不!雖然您經(jīng)常會(huì)聽到開發(fā)人員使用它們的同義詞壶笼,但是它們之間有很大的不同神僵。ECMAScript是一種基于ECMA-262中定義的標(biāo)準(zhǔn)的腳本語(yǔ)言,不與Web瀏覽器綁定覆劈”@瘢基于ECMAScript構(gòu)建了一種更健壯的腳本語(yǔ)言沛励,比如JavaScript。
JavaScript的實(shí)現(xiàn)
ECMAScript的JavaScript實(shí)現(xiàn)有三個(gè)區(qū)部分炮障,統(tǒng)稱為JavaScript目派。
核心-這是以ECMAScript為基礎(chǔ)的。因此胁赢,ECMAScript定義了語(yǔ)法企蹭、數(shù)據(jù)類型、語(yǔ)句智末、運(yùn)算符等谅摄。
文檔對(duì)象模型(DOM)-瀏覽器呈現(xiàn)為向客戶端或用戶顯示的節(jié)點(diǎn)層次結(jié)構(gòu)。
瀏覽器對(duì)象模型(BOM)-這就是開發(fā)者可以操縱瀏覽器窗口的地方系馆。使用BOM螟凭,開發(fā)人員可以訪問(wèn)瀏覽器特性,并在DOM上下文或正在呈現(xiàn)的頁(yè)面之外對(duì)它們進(jìn)行操作它呀。
接下來(lái)是什么螺男?
理解JavaScript的三種不同實(shí)現(xiàn)及其歷史是很重要的,以了解它在一段時(shí)間內(nèi)是如何影響到語(yǔ)言的纵穿。在本系列文章中下隧,我們接下來(lái)將討論ES6,這是2015年發(fā)布的ECMA-262的第六版谓媒,以及它如何被證明是JavaScript最重要的增強(qiáng)淆院。