如果你很趕時間,那么你只需要記住下面這個結(jié)論:
ECMAScript(編號為ECMA-262)是ECMA協(xié)會所制定的腳本語言的標(biāo)準(zhǔn)/規(guī)范,且與瀏覽器沒有依賴關(guān)系,而JavaScript是一種依賴于瀏覽器的腳本語言,不同瀏覽器的JavaScript在不同程度上實現(xiàn)了ECMAScript標(biāo)準(zhǔn)。
如果對這個結(jié)論仍然十分迷惑或者想要更深入的了解它們之間的關(guān)系,那么請繼續(xù)往下看吧。
JavaScript發(fā)展簡史
JavaScript誕生于1995年,在沒有JavaScript的時候,所有輸入驗證操作都必須由服務(wù)器端進(jìn)行驗證,假如需要完成登陸操作,我們需要完成以下幾步:
- 點擊submit按鈕
- 瀏覽器端(前端)提交表單到服務(wù)器端(后端)
- 服務(wù)器端驗證賬號密碼的正確性,如果正確即登陸成功,否則登陸失敗,返回登陸頁面
登陸成功還好,但萬一灰心登陸失敗就需要重新輸入全部的內(nèi)容,而在那個年代,人們還普遍使用電話撥號上網(wǎng),可想而知,與服務(wù)器的每一次數(shù)據(jù)交換都是一次關(guān)于耐心的考驗,這必然導(dǎo)致很差的用戶體驗感,于是Netscape公司決定開發(fā)客戶端語言,以解決這種問題。
JavaScript開發(fā)時間線
- 1995-02:Netscape開發(fā)JavaScript 1.0完畢,支持瀏覽器Netscape Navigator 2
- 1996-08:微軟開發(fā)JScript,與Netscape相競爭
- 1997:ECMA(歐洲計算機(jī)制造商協(xié)會)指定TC39技術(shù)委員會進(jìn)行JavaScript和JScript的標(biāo)準(zhǔn)化進(jìn)程,數(shù)月之后,ECMAScript出現(xiàn)了
- 1998:ISO/IEC也將ECMAScript作為標(biāo)準(zhǔn)(ISO/IEC-16262),從此,瀏覽器開發(fā)商就以ECMAScript作為各自JavaScript實現(xiàn)的基礎(chǔ)
為什么需要ECMAScript?
這個問題可以上升到“為什么需要標(biāo)準(zhǔn)化”這一問題?
首先,科普一下標(biāo)準(zhǔn)和標(biāo)準(zhǔn)化的概念:
標(biāo)準(zhǔn):《ISO/IEC Guide 2》中定義標(biāo)準(zhǔn)是由一個公認(rèn)的機(jī)構(gòu)制定和批準(zhǔn)的文件,它對活動或活動的結(jié)果規(guī)定了規(guī)則、指南或特性,供共同和反復(fù)使用,以實現(xiàn)在預(yù)定結(jié)果領(lǐng)域內(nèi)的最佳秩序和效益。
標(biāo)準(zhǔn)化:《ISO/IEC Guide2》中定義標(biāo)準(zhǔn)化是對實際與潛在問題做出統(tǒng)一規(guī)定,供共同和重復(fù)使用,以在相關(guān)領(lǐng)域內(nèi)獲取最佳秩序的效益活動。
因此,JavaScript的標(biāo)準(zhǔn)化的目的當(dāng)然也是為了獲取最佳秩序和效益,在未實行標(biāo)準(zhǔn)化時,Netscape和微軟兩家公司雖然實現(xiàn)的瀏覽器腳本語言的功能大致相同,但實現(xiàn)起來差異很大,在這種情況下,開發(fā)者必須同時開發(fā)兩套頁面,以支持兩個瀏覽器的JavaScript功能,效率太低,因此,標(biāo)準(zhǔn)化工作必須開展了。
于是,ECMA協(xié)會根據(jù)現(xiàn)有的JavaScript制定了ECMAScript,在ECMAScript出現(xiàn)之后,此后的瀏覽器廠商的程序員在開發(fā)JavaScript時,都需要以ECMAScript作為基礎(chǔ),從此,理論上如果所有廠商實現(xiàn)了相同的ECMAScript版本,程序員只需要開發(fā)一次,便可以在所有瀏覽器上同時運(yùn)行,大大提升了開發(fā)效率。
總結(jié)
我們?nèi)匀话亚拔牡慕Y(jié)論拿過來:ECMAScript(編號為ECMA-262)是ECMA協(xié)會所制定的腳本語言的標(biāo)準(zhǔn)/規(guī)范,且與瀏覽器沒有依賴關(guān)系,而JavaScript是一種依賴于瀏覽器的腳本語言,不同瀏覽器的JavaScript在不同程度上實現(xiàn)了ECMAScript標(biāo)準(zhǔn)。
或許看完了之前的解釋,你能夠?qū)@個結(jié)論更加明白一些,但我想進(jìn)一步解釋一下:
- ECMAScript:由ECMA-262標(biāo)準(zhǔn)文件定義的一個標(biāo)準(zhǔn)/規(guī)范;
- JavaScript:一種瀏覽器腳本語言,ECMAScript的實現(xiàn)之一;
- ECMAScript不依賴于瀏覽器:它獨(dú)立存在,不只是JavaScript實現(xiàn)了它,其它實現(xiàn)了ECMAScript的語言如Node和Adobe Flash,而且,它不定義DOM,事實上,DOM是由W3C所制定的另一個標(biāo)準(zhǔn),是ECMAScript的擴(kuò)展,也是JavaScript的實現(xiàn)之一;
- JavaScript依賴于瀏覽器:它不僅實現(xiàn)了ECMAScript,還根據(jù)瀏覽器的特性擴(kuò)展了ECMAScript,實現(xiàn)了DOM和BOM;
- 不同瀏覽器的JavaScript在不同程度上實現(xiàn)了ECMAScript標(biāo)準(zhǔn):應(yīng)當(dāng)始終牢記,JavaScript依賴于瀏覽器而存在,但開發(fā)瀏覽器的廠商有很多,它們對ECMAScript標(biāo)準(zhǔn)的實現(xiàn)方式不盡相同、實現(xiàn)版本也不盡相同,自然可能會有不同的結(jié)果甚至執(zhí)行效率;
- 當(dāng)我們提及JavaScript時,事實上并沒有考慮不同瀏覽器JavaScript的區(qū)別,可以認(rèn)為JavaScript是一個廣義的概念,狹義上看,每個瀏覽器的JavaScript各不相同。
總之,ECMAScript 基于 JavaScript而制定, JavaScript 基于 ECMAScript而實現(xiàn)。
參考
1 What’s the difference between JavaScript and ECMAScript?
2 《ISO/IEC Guide 2》
3 《JavaScript高級程序設(shè)計 第三版》
希望本文使你能夠明白并且準(zhǔn)確區(qū)分JavaScript和ECMAScript兩個概念,如果你喜歡這篇文章,不妨為我點個贊,這已經(jīng)對我寫作的很大鼓勵了,如果你有任何疑問,不妨留言交流,再次感謝你的閱讀!
本文首發(fā)于微信公眾號:古月有三木,最近對公眾號比較感興趣,如果你愿意關(guān)注我,不勝感激~


400 186 1886








