今天看到了一道前端題目問到JavaScript和ECMAScript的區(qū)別,然后我就看到了兩種答案:第一種答案非常簡潔,感覺沒什么毛病:
(1)ECMAScript是JavaScript的規(guī)范;JavaScript是對ECMAScript的實現(xiàn)幼东;
感覺很有道理,緊接著又看到了另一種聲音:
(2)JavaScript包含三個部分:ECMAScript科雳、DOM和BOM根蟹。
一下子就有點懵,然后就冷靜的看了一個故事糟秘。
1996年11月(我出生的年代)简逮,JavaScript的創(chuàng)造者Netscape公司,決定將他們的產(chǎn)品JavaScript交給國際標準化組織ECMA尿赚,希望他們能夠?qū)⑦@種語言變成國際的標準散庶。次年ECMA就發(fā)布了262號標準文件(ECMA-262)的第一版,規(guī)定了瀏覽器腳本語言的標準凌净,并將這種語言稱為ECMAScript悲龟。這個標準一開始就是針對JavaScript語言而制定的,但是沒有將其稱為JavaScript冰寻,主要有一下兩個原因:(1)Java是Sun公司注冊的商標须教,并且根據(jù)授權(quán)協(xié)議,只有Netscape公司可以合法的使用JavaScript這個名字斩芭,并且也被其注冊為商標轻腺;(2)想體現(xiàn)這門語言的制定者是ECMA,這樣有利于保證這門語言的開放性和中立性划乖。
所以ECMAScript的確是對于JavaScript的標準贬养、規(guī)范,JavaScript需要按照ECMAScript的規(guī)范進行實現(xiàn)琴庵,非要把他們理解為包含關(guān)系也沒有錯误算,JavaScript是一個整體仰美,它包含對他規(guī)范的定義。
然后緊接著我就開始看JavaScript的另外兩部分DOM和BOM儿礼。我對他們最開始的理解是BOM是對瀏覽器的操作筒占,DOM是對頁面的操作,可是網(wǎng)絡(luò)上給的有關(guān)他們的講解卻總是把DOM包含在了BOM內(nèi)部(如下)蜘犁。
我的疑問就更深了,既然BOM包含了DOM那為什么不說JavaScript包含兩個部分呢止邮?
于是我自問自答这橙。
后來就查閱了一下mdn文檔,發(fā)現(xiàn)了一個很有趣的事情导披,官方并沒有提出過BOM這樣的一個概念(可以參見這個問題)屈扎,但是有一個Web API的說法,Web API是包含了DOM的撩匕。Web提供了一些列的api完成任務(wù)鹰晨,我們可以通過JavaScript來調(diào)用這些api實現(xiàn)我們想要的效果。
于是整個人就很糾結(jié)止毕,最后總算明白了為什么會有官方和非官方的很多幺蛾子事件模蜡,原來我們說的BOM啥的這些可以歸咎于歷史問題,DOM扁凛,BOM這些概念是在Web API標準出來之前就早就有了忍疾,官方的一些標準其實是滯后了,很多都是瀏覽器先實現(xiàn)了谨朝,標準才跟上的卤妒,再加上我個人可能有點咬文嚼字,所以很多文檔都看的稀里糊涂的字币,總算真相大白了则披。
所以很多概念要看懂就行了,分清楚到底哪些是提前講的洗出,哪些又是被后來定義為所謂標準士复,分清楚,扯明白共苛。
關(guān)于上面的第二個概念判没,看看就得了,了解到底有哪些東西就行了隅茎,不用太過于認真澄峰。