網(wǎng)頁是什么
網(wǎng)頁 = Html+CSS+JavaScript
Html: 網(wǎng)頁元素內(nèi)容
CSS: 控制網(wǎng)頁樣式
JavaScript:操作網(wǎng)頁內(nèi)容呻袭,實(shí)現(xiàn)功能或者效果
結(jié)構(gòu) 樣式 行為,俗稱網(wǎng)頁三兄弟. 這篇博客主要介紹js(JavaScript)的基本概念
JavaScirpt 發(fā)展歷史
1.javaScript的誕生
? JavaScript誕生于1995年。起初它的主要目的是處理以前由服務(wù)器端負(fù)責(zé)的一些表單驗(yàn)證慌核。在那個(gè)絕大多數(shù)用戶都在使用調(diào)制解調(diào)器上網(wǎng)的時(shí)代叫挟,用戶填寫完一個(gè)表單點(diǎn)擊提交嘱朽,需要等待幾十秒膘盖,完了服務(wù)器反饋給你說某個(gè)地方填錯(cuò)了......在當(dāng)時(shí)如果能在客戶端完成一些基本的驗(yàn)證絕對(duì)是令人興奮的鞋拟。當(dāng)時(shí)走在技術(shù)革新最前沿的Netscape(網(wǎng)景)公司,決定著手開發(fā)一種客戶端語言蚌父,用來處理這種裝簡單的驗(yàn)證蚕礼。當(dāng)時(shí)就職于Netscape公司的布蘭登·艾奇開始著手計(jì)劃將1995年2月發(fā)布的LiveScript同時(shí)在瀏覽器和服務(wù)器中使用。為了趕在發(fā)布日期前完成LiveScript的開發(fā)梢什,Netscape與Sun公司成立了一個(gè)開發(fā)聯(lián)盟。而此時(shí)朝聋,Netscape為了搭上媒體熱炒Java的順風(fēng)車嗡午,臨時(shí)把LiveScript改名為JavaScript,所以從本質(zhì)上來說JavaScript和Java沒什么關(guān)系冀痕。
? JavaScript 1.0獲得了巨大的成功荔睹,Netscape隨后在Netscape Navigator 3(網(wǎng)景瀏覽器)中發(fā)布了JavaScript 1.1。之后作為競爭對(duì)手的微軟在自家的IE3中加入了名為JScript(名稱不同是為了避免侵權(quán))的JavaScript實(shí)現(xiàn)言蛇。而此時(shí)市面上意味著有3個(gè)不同的JavaScript版本僻他,IE的JScript、網(wǎng)景的JavaScript和ScriptEase中的CEnvi腊尚。當(dāng)時(shí)還沒有標(biāo)準(zhǔn)規(guī)定JavaScript的語法和特性吨拗。隨著版本不同暴露的問題日益加劇,JavaScript的規(guī)范化最終被提上日程婿斥。
? 1997年劝篷,以JavaScript1.1為藍(lán)本的建議被提交給了歐洲計(jì)算機(jī)制造商協(xié)會(huì)(ECMA,European Computer Manufactures Association)該協(xié)會(huì)指定39號(hào)技術(shù)委員會(huì)負(fù)責(zé)將其進(jìn)行標(biāo)準(zhǔn)化民宿,TC39來此各大公司以及其他關(guān)注腳本語言發(fā)展的公司的程序員組成娇妓,經(jīng)過數(shù)月的努力完成了ECMA-262——定義了一種名為ECMAScript的新腳本語言的標(biāo)準(zhǔn)。第二年活鹰,ISO/IEC(國標(biāo)標(biāo)準(zhǔn)化組織和國際電工委員會(huì))也采用了ECMAScript作為標(biāo)準(zhǔn)(即ISO/IEC-16262)哈恰。
參考:Javascript高級(jí)程序設(shè)計(jì)
2.JavaScript的版本
1997年7月,ECMAScript 1.0發(fā)布志群。
1998年6月着绷,ECMAScript 2.0版發(fā)布。
1999年12月赖舟,ECMAScript 3.0版發(fā)布蓬戚,成為JavaScript的通行標(biāo)準(zhǔn),得到了廣泛支持宾抓。
2007年10月子漩,ECMAScript 4.0版草案發(fā)布豫喧,對(duì)3.0版做了大幅升級(jí),預(yù)計(jì)次年8月發(fā)布正式版本幢泼。草案發(fā)布后紧显,由于4.0版的目標(biāo)過于激進(jìn),各方對(duì)于是否通過這個(gè)標(biāo)準(zhǔn)缕棵,發(fā)生了嚴(yán)重分歧孵班。以Yahoo、Microsoft招驴、Google為首的大公司篙程,反對(duì)JavaScript的大幅升級(jí),主張小幅改動(dòng)别厘;以JavaScript創(chuàng)造者Brendan Eich為首的Mozilla公司虱饿,則堅(jiān)持當(dāng)前的草案。
2008年7月触趴,由于對(duì)于下一個(gè)版本應(yīng)該包括哪些功能氮发,各方分歧太大,爭論過于激進(jìn)冗懦,ECMA開會(huì)決定爽冕,中止ECMAScript 4.0的開發(fā)(即廢除了這個(gè)版本),將其中涉及現(xiàn)有功能改善的一小部分披蕉,發(fā)布為ECMAScript 3.1颈畸,而將其他激進(jìn)的設(shè)想擴(kuò)大范圍,放入以后的版本没讲,由于會(huì)議的氣氛承冰,該版本的項(xiàng)目代號(hào)起名為Harmony(和諧)。會(huì)后不久食零,ECMAScript 3.1就改名為ECMAScript 5困乒。
2009年12月,ECMAScript 5.0版正式發(fā)布贰谣。Harmony項(xiàng)目則一分為二娜搂,一些較為可行的設(shè)想定名為JavaScript.next繼續(xù)開發(fā),后來演變成ECMAScript 6吱抚;一些不是很成熟的設(shè)想百宇,則被視為JavaScript.next.next,在更遠(yuǎn)的將來再考慮推出秘豹。TC39的總體考慮是携御,ECMAScript 5與ECMAScript 3基本保持兼容,較大的語法修正和新功能加入,將由JavaScript.next完成啄刹。當(dāng)時(shí)涮坐,JavaScript.next指的是ECMAScript 6。第六版發(fā)布以后誓军,將指ECMAScript 7袱讹。TC39預(yù)計(jì),ECMAScript 5會(huì)在2013年的年中成為JavaScript開發(fā)的主流標(biāo)準(zhǔn)昵时,并在此后五年中一直保持這個(gè)位置捷雕。
2011年6月,ECMAscript 5.1版發(fā)布壹甥,并且成為ISO國際標(biāo)準(zhǔn)(ISO/IEC 16262:2011)救巷。到了2012年底,所有主要瀏覽器都支持ECMAScript 5.1版的全部功能句柠。
2013年3月征绸,ECMAScript 6草案凍結(jié),不再添加新功能俄占。新的功能設(shè)想將被放到ECMAScript 7。
2013年12月淆衷,ECMAScript 6草案發(fā)布缸榄。然后是12個(gè)月的討論期,聽取各方反饋祝拯。
2015年6月甚带,ECMAScript 6正式發(fā)布,并且更名為“ECMAScript 2015”佳头。這是因?yàn)門C39委員會(huì)計(jì)劃鹰贵,以后每年發(fā)布一個(gè)ECMAScirpt的版本,下一個(gè)版本在2016年發(fā)布康嘉,稱為“ECMAScript 2016”碉输。
除了ECMAScript的版本,很長一段時(shí)間中亭珍,Netscape公司(以及繼承它的Mozilla基金會(huì))在內(nèi)部依然使用自己的版本號(hào)敷钾。這導(dǎo)致了JavaScript有自己不同于ECMAScript的版本號(hào)。1996年3月肄梨,Navigator 2.0內(nèi)置了JavaScript 1.0阻荒。JavaScript 1.1版對(duì)應(yīng)ECMAScript 1.0,但是直到JavaScript 1.4版才完全兼容ECMAScript 1.0众羡。JavaScript 1.5版完全兼容ECMAScript 3.0侨赡。目前的JavaScript 1.8版完全兼容ECMAScript 5。
3.周邊大事記
JavaScript伴隨著互聯(lián)網(wǎng)的發(fā)展一起發(fā)展⊙蛞迹互聯(lián)網(wǎng)周邊技術(shù)的快速發(fā)展蓖宦,刺激和推動(dòng)了JavaScript語言的發(fā)展。
1996年舶掖,樣式表標(biāo)準(zhǔn)CSS第一版發(fā)布球昨。
1997年,DHTML(Dynamic HTML眨攘,動(dòng)態(tài)HTML)發(fā)布主慰,允許動(dòng)態(tài)改變網(wǎng)頁內(nèi)容。這標(biāo)志著DOM模式(Document Object Model鲫售,文檔對(duì)象模型)正式應(yīng)用共螺。
1998年,Netscape公司開源了瀏覽器套件情竹,這導(dǎo)致了Mozilla項(xiàng)目的誕生藐不。幾個(gè)月后,美國在線(AOL)宣布并購Netscape秦效。
1999年雏蛮,IE 5部署了XMLHttpRequest接口,允許JavaScript發(fā)出HTTP請(qǐng)求阱州,為后來大行其道的Ajax應(yīng)用創(chuàng)造了條件挑秉。
2000年,KDE項(xiàng)目重寫了瀏覽器引擎KHTML苔货,為后來的WebKit和Blink引擎打下基礎(chǔ)犀概。這一年的10月23日,KDE 2.0發(fā)布夜惭,第一次將KHTML瀏覽器包括其中姻灶。
2001年,微軟公司時(shí)隔5年之后诈茧,發(fā)布了IE瀏覽器的下一個(gè)版本Internet Explorer 6产喉。這是當(dāng)時(shí)最先進(jìn)的瀏覽器,它后來統(tǒng)治了瀏覽器市場(chǎng)多年敢会。
2001年镊叁,Douglas Crockford提出了JSON格式,用于取代XML格式走触,進(jìn)行服務(wù)器和網(wǎng)頁之間的數(shù)據(jù)交換晦譬。JavaScript可以原生支持這種格式,不需要額外部署代碼互广。
2002年敛腌,Mozilla項(xiàng)目發(fā)布了它的瀏覽器的第一版卧土,后來起名為Firefox。
2003年像樊,蘋果公司發(fā)布了Safari瀏覽器的第一版尤莺。
2004年,Google公司發(fā)布了Gmail生棍,促成了互聯(lián)網(wǎng)應(yīng)用程序(Web Application)這個(gè)概念的誕生颤霎。由于Gmail是在4月1日發(fā)布的,很多人起初以為這只是一個(gè)玩笑涂滴。
2004年友酱,Dojo框架誕生,為不同瀏覽器提供了同一接口柔纵,并為主要功能提供了便利的調(diào)用方法缔杉。這標(biāo)志著JavaScript編程框架的時(shí)代開始來臨。
2004年搁料,WHATWG組織成立或详,致力于加速HTML語言的標(biāo)準(zhǔn)化進(jìn)程。
2005年郭计,蘋果公司在KHTML引擎基礎(chǔ)上霸琴,建立了WebKit引擎。
2005年昭伸,Ajax方法(Asynchronous JavaScript and XML)正式誕生梧乘,Jesse James Garrett發(fā)明了這個(gè)詞匯。它開始流行的標(biāo)志是勋乾,2月份發(fā)布的Google Maps項(xiàng)目大量采用該方法。它幾乎成了新一代網(wǎng)站的標(biāo)準(zhǔn)做法嗡善,促成了Web 2.0時(shí)代的來臨辑莫。
2005年,Apache基金會(huì)發(fā)布了CouchDB數(shù)據(jù)庫罩引。這是一個(gè)基于JSON格式的數(shù)據(jù)庫各吨,可以用JavaScript函數(shù)定義視圖和索引。它在本質(zhì)上有別于傳統(tǒng)的關(guān)系型數(shù)據(jù)庫袁铐,標(biāo)識(shí)著NoSQL類型的數(shù)據(jù)庫誕生揭蜒。
2006年,jQuery函數(shù)庫誕生剔桨,作者為John Resig屉更。jQuery為操作網(wǎng)頁DOM結(jié)構(gòu)提供了非常強(qiáng)大易用的接口,成為了使用最廣泛的函數(shù)庫洒缀,并且讓JavaScript語言的應(yīng)用難度大大降低瑰谜,推動(dòng)了這種語言的流行欺冀。
2006年,微軟公司發(fā)布IE 7萨脑,標(biāo)志重新開始啟動(dòng)瀏覽器的開發(fā)隐轩。
2006年,Google推出 Google Web Toolkit 項(xiàng)目(縮寫為GWT)渤早,提供Java編譯成JavaScript的功能职车,開創(chuàng)了將其他語言轉(zhuǎn)為JavaScript的先河。
2007年鹊杖,Webkit引擎在iPhone手機(jī)中得到部署悴灵。它最初基于KDE項(xiàng)目,2003年蘋果公司首先采用仅淑,2005年開源称勋。這標(biāo)志著JavaScript語言開始能在手機(jī)中使用了,意味著有可能寫出在桌面電腦和手機(jī)中都能使用的程序涯竟。
2007年赡鲜,Douglas Crockford發(fā)表了名為《JavaScript: The good parts》的演講,次年由O’Reilly出版社出版庐船。這標(biāo)志著軟件行業(yè)開始嚴(yán)肅對(duì)待JavaScript語言银酬,對(duì)它的語法開始重新認(rèn)識(shí),
2008年筐钟,V8編譯器誕生揩瞪。這是Google公司為Chrome瀏覽器而開發(fā)的,它的特點(diǎn)是讓JavaScript的運(yùn)行變得非陈ǔ澹快李破。它提高了JavaScript的性能,推動(dòng)了語法的改進(jìn)和標(biāo)準(zhǔn)化壹将,改變外界對(duì)JavaScript的不佳印象嗤攻。同時(shí),V8是開源的诽俯,任何人想要一種快速的嵌入式腳本語言妇菱,都可以采用V8,這拓展了JavaScript的應(yīng)用領(lǐng)域暴区。
2009年闯团,Node.js項(xiàng)目誕生,創(chuàng)始人為Ryan Dahl仙粱,它標(biāo)志著JavaScript可以用于服務(wù)器端編程房交,從此網(wǎng)站的前端和后端可以使用同一種語言開發(fā)。并且伐割,Node.js可以承受很大的并發(fā)流量涌萤,使得開發(fā)某些互聯(lián)網(wǎng)大規(guī)模的實(shí)時(shí)應(yīng)用變得容易淹遵。
2009年,Jeremy Ashkenas發(fā)布了CoffeeScript的最初版本负溪。CoffeeScript可以被轉(zhuǎn)化為JavaScript運(yùn)行透揣,但是語法要比JavaScript簡潔。這開啟了其他語言轉(zhuǎn)為JavaScript的風(fēng)潮川抡。
2009年辐真,PhoneGap項(xiàng)目誕生,它將HTML5和JavaScript引入移動(dòng)設(shè)備的應(yīng)用程序開發(fā)崖堤,主要針對(duì)iOS和Android平臺(tái)侍咱,使得JavaScript可以用于跨平臺(tái)的應(yīng)用程序開發(fā)。
2009密幔,Google發(fā)布Chrome OS楔脯,號(hào)稱是以瀏覽器為基礎(chǔ)發(fā)展成的操作系統(tǒng),允許直接使用JavaScript編寫應(yīng)用程序胯甩。類似的項(xiàng)目還有Mozilla的Firefox OS昧廷。
2010年,三個(gè)重要的項(xiàng)目誕生偎箫,分別是NPM木柬、BackboneJS和RequireJS,標(biāo)志著JavaScript進(jìn)入模塊化開發(fā)的時(shí)代淹办。
2011年眉枕,微軟公司發(fā)布Windows 8操作系統(tǒng),將JavaScript作為應(yīng)用程序的開發(fā)語言之一怜森,直接提供系統(tǒng)支持速挑。
2011年,Google發(fā)布了Dart語言副硅,目的是為了結(jié)束JavaScript語言在瀏覽器中的壟斷姥宝,提供更合理、更強(qiáng)大的語法和功能想许。Chromium瀏覽器有內(nèi)置的Dart虛擬機(jī)伶授,可以運(yùn)行Dart程序断序,但Dart程序也可以被編譯成JavaScript程序運(yùn)行流纹。
2011年,微軟工程師Scott Hanselman提出违诗,JavaScript將是互聯(lián)網(wǎng)的匯編語言漱凝。因?yàn)樗鼰o所不在,而且正在變得越來越快诸迟。其他語言的程序可以被轉(zhuǎn)成JavaScript語言茸炒,然后在瀏覽器中運(yùn)行愕乎。
2012年,單頁面應(yīng)用程序框架(single-page app framework)開始崛起壁公,AngularJS項(xiàng)目和Ember項(xiàng)目都發(fā)布了1.0版本感论。
2012年,微軟發(fā)布TypeScript語言紊册。該語言被設(shè)計(jì)成JavaScript的超集比肄,這意味著所有JavaScipt程序,都可以不經(jīng)修改地在TypeScript中運(yùn)行囊陡。同時(shí)芳绩,TypeScript添加了很多新的語法特性,主要目的是為了開發(fā)大型程序撞反,然后還可以被編譯成JavaScript運(yùn)行妥色。
2012年,Mozilla基金會(huì)提出asm.js規(guī)格遏片。asm.js是JavaScript的一個(gè)子集嘹害,所有符合asm.js的程序都可以在瀏覽器中運(yùn)行,它的特殊之處在于語法有嚴(yán)格限定丁稀,可以被快速編譯成性能良好的機(jī)器碼吼拥。這樣做的目的,是為了給其他語言提供一個(gè)編譯規(guī)范线衫,使其可以被編譯成高效的JavaScript代碼凿可。同時(shí),Mozilla基金會(huì)還發(fā)起了Emscripten項(xiàng)目授账,目標(biāo)就是提供一個(gè)跨語言的編譯器枯跑,能夠?qū)LVM的位代碼(bitcode)轉(zhuǎn)為JavaScript代碼,在瀏覽器中運(yùn)行白热。因?yàn)榇蟛糠諰LVM位代碼都是從C / C++語言生成的敛助,這意味著C / C++將可以在瀏覽器中運(yùn)行。此外屋确,Mozilla旗下還有LLJS(將JavaScript轉(zhuǎn)為C代碼)項(xiàng)目和River Trail(一個(gè)用于多核心處理器的ECMAScript擴(kuò)展)項(xiàng)目纳击。目前,在可以被編譯成JavaScript的語言列表上攻臀,共有將近40種語言焕数。
2013年,Mozilla基金會(huì)發(fā)布手機(jī)操作系統(tǒng)Firefox OS刨啸,該操作系統(tǒng)的整個(gè)用戶界面都使用JavaScript堡赔。
2013年,ECMA正式推出JSON的國際標(biāo)準(zhǔn)设联,這意味著JSON格式已經(jīng)變得與XML格式一樣重要和正式了善已。
2013年5月灼捂,F(xiàn)acebook發(fā)布UI框架庫React,引入了新的JSX語法换团,使得UI層可以用組件開發(fā)悉稠。
2014年,微軟推出JavaScript的Windows庫WinJS艘包,標(biāo)志微軟公司全面支持JavaScript與Windows操作系統(tǒng)的融合偎球。
2014年11月,由于對(duì)Joyent公司壟斷Node項(xiàng)目辑甜、以及該項(xiàng)目進(jìn)展緩慢的不滿衰絮,一部分核心開發(fā)者離開了Node.js,創(chuàng)造了io.js項(xiàng)目磷醋,這是一個(gè)更開放猫牡、更新更頻繁的Node.js版本,很短時(shí)間內(nèi)就發(fā)布到了2.0版邓线。三個(gè)月后淌友,Joyent公司宣布放棄對(duì)Node項(xiàng)目的控制,將其轉(zhuǎn)交給新成立的開放性質(zhì)的Node基金會(huì)骇陈。隨后震庭,io.js項(xiàng)目宣布回歸Node,兩個(gè)版本將合并你雌。
2015年3月器联,F(xiàn)acebook公司發(fā)布了React Native項(xiàng)目,將React框架移植到了手機(jī)端婿崭,可以用來開發(fā)手機(jī)App拨拓。它會(huì)將JavaScript代碼轉(zhuǎn)為iOS平臺(tái)的Objective-C代碼,或者Android平臺(tái)的Java代碼氓栈,從而為JavaScript語言開發(fā)高性能的原生App打開了一條道路渣磷。
2015年4月,Angular框架宣布授瘦,2.0版將基于微軟公司的TypeScript語言開發(fā)醋界,這等于為JavaScript語言引入了強(qiáng)類型。
2015年5月提完,Node模塊管理器npm超越CPAN形纺,標(biāo)志著JavaScript成為世界上軟件模塊最多的語言。
2015年5月氯葬,Google公司的Polymer框架發(fā)布1.0版挡篓。該項(xiàng)目的目標(biāo)是生產(chǎn)環(huán)境可以使用WebComponent組件婉陷,如果能夠達(dá)到目標(biāo)帚称,Web開發(fā)將進(jìn)入一個(gè)全新的以組件為開發(fā)基礎(chǔ)的階段官研。
2015年6月,ECMA標(biāo)準(zhǔn)化組織正式批準(zhǔn)了ECMAScript 6語言標(biāo)準(zhǔn)闯睹,定名為《ECMAScript 2015 標(biāo)準(zhǔn)》戏羽。JavaScript語言正式進(jìn)入了下一個(gè)階段,成為一種企業(yè)級(jí)的楼吃、開發(fā)大規(guī)模應(yīng)用的語言始花。這個(gè)標(biāo)準(zhǔn)從提出到批準(zhǔn),歷時(shí)10年孩锡,而JavaScript語言從誕生至今也已經(jīng)20年了酷宵。
2015年6月,Mozilla 在 asm.js 的基礎(chǔ)上發(fā)布 WebAssembly 項(xiàng)目躬窜。這是一種JavaScript語言編譯后的二進(jìn)制格式浇垦,類似于Java的字節(jié)碼,有利于移動(dòng)設(shè)備加載JavaScript腳本荣挨,解析速度提高了20+倍男韧。這意味著將來的軟件,會(huì)發(fā)布JavaScript二進(jìn)制包默垄。
2016年6月此虑,《ECMAScript 2016 標(biāo)準(zhǔn)》發(fā)布。與前一年發(fā)布的版本相比口锭,它只增加了兩個(gè)較小的特性朦前。
2017年6月,《ECMAScript 2017 標(biāo)準(zhǔn)》發(fā)布鹃操,正式引入了 async 函數(shù)况既,使得異步操作的寫法出現(xiàn)了根本的變化。
2017年11月组民,所有主流瀏覽器全部支持 WebAssembly揭糕,這意味著任何語言都可以編譯成 JavaScript,在瀏覽器運(yùn)行马僻。
參考:http://javascript.ruanyifeng.com/introduction/history.html