# JavaScript è¯è¨çåå² ## è¯ç JavaScript å 为äºèç½èçï¼ç´§è·çæµè§å¨çåºç°èé®ä¸ãå顾å®çåå²ï¼å°±è¦ä»æµè§å¨çåå²è®²èµ·ã 1990å¹´åºï¼æ¬§æ´²æ ¸è½ç ç©¶ç»ç»ï¼CERNï¼ç§å¦å®¶ Tim Berners-Leeï¼å¨å ¨ä¸çæå¤§ççµèç½ç»ââäºèç½çåºç¡ä¸ï¼åæäºä¸ç»´ç½ï¼World Wide Webï¼ï¼ä»æ¤å¯ä»¥å¨ç½ä¸æµè§ç½é¡µæä»¶ãææ©çç½é¡µåªè½å¨æä½ç³»ç»çç»ç«¯éæµè§ï¼ä¹å°±æ¯è¯´åªè½ä½¿ç¨å½ä»¤è¡æä½ï¼ç½é¡µé½æ¯å¨å符çªå£ä¸æ¾ç¤ºï¼è¿å½ç¶é叏䏿¹ä¾¿ã 1992å¹´åºï¼ç¾å½å½å®¶è¶ 级çµèåºç¨ä¸å¿ï¼NCSAï¼å¼å§å¼åä¸ä¸ªç¬ç«çæµè§å¨ï¼å«å Mosaicãè¿æ¯äººç±»åå²ä¸ç¬¬ä¸ä¸ªæµè§å¨ï¼ä»æ¤ç½é¡µå¯ä»¥å¨å¾å½¢çé¢ççªå£æµè§ã 1994å¹´10æï¼NCSA çä¸ä¸ªä¸»è¦ç¨åºå Marc Andreessen èåé£é©æèµå®¶ Jim Clarkï¼æç«äº Mosaic éä¿¡å ¬å¸ï¼Mosaic Communicationsï¼ï¼ä¸ä¹ åæ¹å为 Netscapeãè¿å®¶å ¬å¸çæ¹åï¼å°±æ¯å¨ Mosaic çåºç¡ä¸ï¼å¼åé¢åæ®éç¨æ·çæ°ä¸ä»£çæµè§å¨ Netscape Navigatorã 1994å¹´12æï¼Navigator åå¸äº1.0çï¼å¸åºä»½é¢ä¸ä¸¾è¶ è¿90%ã Netscape å ¬å¸å¾å¿«åç°ï¼Navigator æµè§å¨éè¦ä¸ç§å¯ä»¥åµå ¥ç½é¡µçèæ¬è¯è¨ï¼ç¨æ¥æ§å¶æµè§å¨è¡ä¸ºã彿¶ï¼ç½é徿 ¢èä¸ä¸ç½è´¹å¾è´µï¼æäºæä½ä¸å®å¨æå¡å¨ç«¯å®æãæ¯å¦ï¼å¦æç¨æ·å¿è®°å¡«åâç¨æ·åâï¼å°±ç¹äºâåéâæé®ï¼å°æå¡å¨ååç°è¿ä¸ç¹å°±æç¹å¤ªæäºï¼æå¥½è½å¨ç¨æ·ååºæ°æ®ä¹åï¼å°±åè¯ç¨æ·â请填åç¨æ·åâãè¿å°±éè¦å¨ç½é¡µä¸åµå ¥å°ç¨åºï¼è®©æµè§å¨æ£æ¥æ¯ä¸æ æ¯å¦é½å¡«åäºã 管çå±å¯¹è¿ç§æµè§å¨èæ¬è¯è¨çè®¾æ³æ¯ï¼åè½ä¸éè¦å¤ªå¼ºï¼è¯æ³è¾ä¸ºç®åï¼å®¹æå¦ä¹ åé¨ç½²ãé£ä¸å¹´ï¼æ£é¢ Sun å ¬å¸ç Java è¯è¨é®ä¸ï¼å¸åºæ¨å¹¿æ´»å¨é常æåãNetscape å ¬å¸å³å®ä¸ Sun å ¬å¸åä½ï¼æµè§å¨æ¯æåµå ¥ Java å°ç¨åºï¼åæ¥ç§°ä¸º Java appletï¼ã使¯ï¼æµè§å¨èæ¬è¯è¨æ¯å¦å°±éç¨ Javaï¼ååå¨äºè®ºã忥ï¼è¿æ¯å³å®ä¸ä½¿ç¨ Javaï¼å 为ç½é¡µå°ç¨åºä¸éè¦ Java è¿ä¹âéâçè¯æ³ã使¯ï¼åæ¶ä¹å³å®èæ¬è¯è¨çè¯æ³è¦æ¥è¿ Javaï¼å¹¶ä¸å¯ä»¥æ¯æ Java ç¨åºãè¿äºè®¾æ³ç´æ¥æé¤äºä½¿ç¨ç°åè¯è¨ï¼æ¯å¦ PerlãPython å TCLã 1995å¹´ï¼Netscape å ¬å¸éä½£äºç¨åºå Brendan Eich å¼åè¿ç§ç½é¡µèæ¬è¯è¨ãBrendan Eich æå¾å¼ºç彿°å¼ç¼ç¨èæ¯ï¼å¸æä»¥ Scheme è¯è¨ï¼å½æ°å¼è¯è¨é¼»ç¥ LISP è¯è¨çä¸ç§æ¹è¨ï¼ä¸ºèæ¬ï¼å®ç°è¿ç§æ°è¯è¨ã 1995å¹´5æï¼Brendan Eich åªç¨äº10天ï¼å°±è®¾è®¡å®æäºè¿ç§è¯è¨ç第ä¸çã宿¯ä¸ä¸ªå¤§æç©ï¼è¯æ³æå¤ä¸ªæ¥æºã - åºæ¬è¯æ³ï¼åé´ C è¯è¨å Java è¯è¨ã - æ°æ®ç»æï¼åé´ Java è¯è¨ï¼å æ¬å°å¼åæåå§å¼å对象两大类ã - 彿°çç¨æ³ï¼åé´ Scheme è¯è¨å Awk è¯è¨ï¼å°å½æ°å½ä½ç¬¬ä¸çå ¬æ°ï¼å¹¶å¼å ¥éå ã - ååç»§æ¿æ¨¡åï¼åé´ Self è¯è¨ï¼Smalltalk çä¸ç§åç§ï¼ã - æ£å表达å¼ï¼åé´ Perl è¯è¨ã - åç¬¦ä¸²åæ°ç»å¤çï¼åé´ Python è¯è¨ã 为äºä¿æç®åï¼è¿ç§èæ¬è¯è¨ç¼ºå°ä¸äºå ³é®çåè½ï¼æ¯å¦å级ä½ç¨åãæ¨¡åãåç±»åï¼subtypingï¼ççï¼ä½æ¯å¯ä»¥å©ç¨ç°æåè½æ¾åºè§£å³åæ³ãè¿ç§åè½çä¸è¶³ï¼ç´æ¥å¯¼è´äºåæ¥ JavaScript çä¸ä¸ªæ¾èç¹ç¹ï¼å¯¹äºå ¶ä»è¯è¨ï¼ä½ éè¦å¦ä¹ è¯è¨çåç§åè½ï¼èå¯¹äº JavaScriptï¼ä½ 常常éè¦å¦ä¹ åç§è§£å³é®é¢ç模å¼ãèä¸ç±äºæ¥æºå¤æ ·ï¼ä»ä¸å¼å§å°±æ³¨å®ï¼JavaScript çç¼ç¨é£æ ¼æ¯å½æ°å¼ç¼ç¨åé¢å对象ç¼ç¨çä¸ç§æ··åä½ã Netscape å ¬å¸çè¿ç§æµè§å¨èæ¬è¯è¨ï¼æåååå«å Mochaï¼1995å¹´9ææ¹ä¸º LiveScriptã12æï¼Netscape å ¬å¸ä¸ Sun å ¬å¸ï¼Java è¯è¨çåæè åææè ï¼è¾¾æåè®®ï¼åè å 许å°è¿ç§è¯è¨å«å JavaScriptãè¿æ ·ä¸æ¥ï¼Netscape å ¬å¸å¯ä»¥åå© Java è¯è¨ç声å¿ï¼è Sun å ¬å¸åå°èªå·±çå½±ååæ©å±å°äºæµè§å¨ã ä¹æä»¥èµ·è¿ä¸ªååï¼å¹¶ä¸æ¯å 为 JavaScript æ¬èº«ä¸ Java è¯è¨æå¤ä¹æ·±çå ³ç³»ï¼äºå®ä¸ï¼ä¸¤è å ³ç³»å¹¶ä¸æ·±ï¼è¯¦è§ä¸èï¼ï¼èæ¯å 为 Netscape å ¬å¸å·²ç»å³å®ï¼ä½¿ç¨ Java è¯è¨å¼åç½ç»åºç¨ç¨åºï¼JavaScript å¯ä»¥åè¶æ°´ä¸æ ·ï¼å°å个é¨åè¿æ¥èµ·æ¥ãå½ç¶ï¼åæ¥çå岿¯ Java è¯è¨çæµè§å¨æä»¶å¤±è´¥äºï¼JavaScript åè忬å 大ã 1995å¹´12æ4æ¥ï¼Netscape å ¬å¸ä¸ Sun å ¬å¸èååå¸äº JavaScript è¯è¨ï¼å¯¹å¤å®£ä¼ JavaScript æ¯ Java çè¡¥å ï¼å±äºè½»é级ç Javaï¼ä¸é¨ç¨æ¥æä½ç½é¡µã 1996å¹´3æï¼Navigator 2.0 æµè§å¨æ£å¼å ç½®äº JavaScript èæ¬è¯è¨ã ## JavaScript ä¸ Java çå ³ç³» è¿éä¸é¨è¯´ä¸ä¸ JavaScript å Java çå ³ç³»ãå®ä»¬æ¯ä¸¤ç§ä¸ä¸æ ·çè¯è¨ï¼ä½æ¯å½¼æ¤åå¨èç³»ã JavaScript çåºæ¬è¯æ³å对象ä½ç³»ï¼æ¯æ¨¡ä»¿ Java è设计çã使¯ï¼JavaScript 没æéç¨ Java çéæç±»åãæ£æ¯å 为 JavaScript ä¸ Java æå¾å¤§çç¸ä¼¼æ§ï¼æä»¥è¿é¨è¯è¨æä»ä¸å¼å§ç LiveScript æ¹å为 JavaScriptãåºæ¬ä¸ï¼JavaScript è¿ä¸ªååçåææ¯âå¾åJavaçèæ¬è¯è¨âã JavaScript è¯è¨ç彿°æ¯ä¸ç§ç¬ç«çæ°æ®ç±»åï¼ä»¥åéç¨åºäºåå对象ï¼prototypeï¼çç»§æ¿é¾ãè¿æ¯å®ä¸ Java è¯æ³æå¤§ç两ç¹åºå«ãJavaScript è¯æ³è¦æ¯ Java èªç±å¾å¤ã å¦å¤ï¼Java è¯è¨éè¦ç¼è¯ï¼è JavaScript è¯è¨åæ¯è¿è¡æ¶ç±è§£éå¨ç´æ¥æ§è¡ã æ»ä¹ï¼JavaScript çåå§è®¾è®¡ç®æ æ¯ä¸ç§å°åçãç®åç卿è¯è¨ï¼ä¸ Java æè¶³å¤çç¸ä¼¼æ§ï¼ä½¿å¾ä½¿ç¨è ï¼å°¤å ¶æ¯ Java ç¨åºåï¼å¯ä»¥å¿«é䏿ã ## JavaScript ä¸ ECMAScript çå ³ç³» 1996å¹´8æï¼å¾®è½¯æ¨¡ä»¿ JavaScript å¼åäºä¸ç§ç¸è¿çè¯è¨ï¼åå为JScriptï¼JavaScript æ¯ Netscape çæ³¨ååæ ï¼å¾®è½¯ä¸è½ç¨ï¼ï¼é¦å å ç½®äºIE 3.0ãNetscape å ¬å¸é¢ä¸´ä¸§å¤±æµè§å¨èæ¬è¯è¨ç主导æçå±é¢ã 1996å¹´11æï¼Netscape å ¬å¸å³å®å° JavaScript æäº¤ç»å½é æ ååç»ç» ECMAï¼European Computer Manufacturers Associationï¼ï¼å¸æ JavaScript è½å¤æä¸ºå½é æ åï¼ä»¥æ¤æµæå¾®è½¯ãECMA ç39å·ææ¯å§åä¼ï¼Technical Committee 39ï¼è´è´£å¶å®åå®¡æ ¸è¿ä¸ªæ åï¼æåç±ä¸å çå¤§å ¬å¸æ´¾åºçå·¥ç¨å¸ç»æï¼ç®åå ±25个人ã该å§åä¼å®æå¼ä¼ï¼ææçé®ä»¶è®¨è®ºåä¼è®®è®°å½ï¼é½æ¯å ¬å¼çã 1997å¹´7æï¼ECMA ç»ç»åå¸262å·æ åæä»¶ï¼ECMA-262ï¼ç第ä¸çï¼è§å®äºæµè§å¨èæ¬è¯è¨çæ åï¼å¹¶å°è¿ç§è¯è¨ç§°ä¸º ECMAScriptãè¿ä¸ªçæ¬å°±æ¯ ECMAScript 1.0 çã乿以ä¸å« JavaScriptï¼ä¸æ¹é¢æ¯ç±äºåæ çå ³ç³»ï¼Java æ¯ Sun å ¬å¸çåæ ï¼æ ¹æ®ä¸ä»½ææåè®®ï¼åªæ Netscape å ¬å¸å¯ä»¥åæ³å°ä½¿ç¨ JavaScript è¿ä¸ªååï¼ä¸ JavaScript å·²ç»è¢« Netscape å ¬å¸æ³¨åä¸ºåæ ï¼å¦ä¸æ¹é¢ä¹æ¯æ³ä½ç°è¿é¨è¯è¨çå¶å®è æ¯ ECMAï¼ä¸æ¯ Netscapeï¼è¿æ ·æå©äºä¿è¯è¿é¨è¯è¨ç弿¾æ§åä¸ç«æ§ãå æ¤ï¼ECMAScript å JavaScript çå ³ç³»æ¯ï¼åè æ¯åè çè§æ ¼ï¼åè æ¯åè çä¸ç§å®ç°ã卿¥å¸¸åºåï¼è¿ä¸¤ä¸ªè¯æ¯å¯ä»¥äºæ¢çã ECMAScript åªç¨æ¥æ åå JavaScript è¿ç§è¯è¨çåºæ¬è¯æ³ç»æï¼ä¸é¨ç½²ç¯å¢ç¸å ³çæ åé½ç±å ¶ä»æ åè§å®ï¼æ¯å¦ DOM çæ åå°±æ¯ç± W3Cç»ç»ï¼World Wide Web Consortiumï¼å¶å®çã ECMA-262 æ å忥ä¹è¢«å¦ä¸ä¸ªå½é æ ååç»ç» ISOï¼International Organization for Standardizationï¼æ¹åï¼æ åå·æ¯ ISO-16262ã ## JavaScript ççæ¬ 1997å¹´7æï¼ECMAScript 1.0åå¸ã 1998å¹´6æï¼ECMAScript 2.0çåå¸ã 1999å¹´12æï¼ECMAScript 3.0çåå¸ï¼æä¸º JavaScript çéè¡æ åï¼å¾å°äºå¹¿æ³æ¯æã 2007å¹´10æï¼ECMAScript 4.0çèæ¡åå¸ï¼å¯¹3.0çåäºå¤§å¹ å级ï¼é¢è®¡æ¬¡å¹´8æå叿£å¼çæ¬ãèæ¡åå¸åï¼ç±äº4.0ççç®æ è¿äºæ¿è¿ï¼åæ¹å¯¹äºæ¯å¦éè¿è¿ä¸ªæ åï¼åçäºä¸¥éåæ§ã以 YahooãMicrosoftãGoogle 为é¦çå¤§å ¬å¸ï¼å对 JavaScript çå¤§å¹ å级ï¼ä¸»å¼ å°å¹ æ¹å¨ï¼ä»¥ JavaScript åé è Brendan Eich 为é¦ç Mozilla å ¬å¸ï¼ååæå½åçèæ¡ã 2008å¹´7æï¼ç±äºå¯¹äºä¸ä¸ä¸ªçæ¬åºè¯¥å æ¬åªäºåè½ï¼åæ¹åæ§å¤ªå¤§ï¼äºè®ºè¿äºæ¿è¿ï¼ECMA å¼ä¼å³å®ï¼ä¸æ¢ ECMAScript 4.0 çå¼åï¼å³åºé¤äºè¿ä¸ªçæ¬ï¼ï¼å°å ¶ä¸æ¶åç°æåè½æ¹åçä¸å°é¨åï¼åå¸ä¸º ECMAScript 3.1ï¼èå°å ¶ä»æ¿è¿çè®¾æ³æ©å¤§èå´ï¼æ¾å ¥ä»¥åççæ¬ï¼ç±äºä¼è®®çæ°æ°ï¼è¯¥çæ¬ç项ç®ä»£å·èµ·å为 Harmonyï¼åè°ï¼ãä¼åä¸ä¹ ï¼ECMAScript 3.1 å°±æ¹å为 ECMAScript 5ã 2009å¹´12æï¼ECMAScript 5.0ç æ£å¼åå¸ãHarmony 项ç®åä¸å为äºï¼ä¸äºè¾ä¸ºå¯è¡ç设æ³å®å为 JavaScript.next ç»§ç»å¼åï¼åæ¥æ¼åæ ECMAScript 6ï¼ä¸äºä¸æ¯å¾æçç设æ³ï¼å被è§ä¸º JavaScript.next.nextï¼å¨æ´è¿çå°æ¥åèèæ¨åºãTC39 çæ»ä½èèæ¯ï¼ECMAScript 5 ä¸ ECMAScript 3 åºæ¬ä¿æå ¼å®¹ï¼è¾å¤§çè¯æ³ä¿®æ£åæ°åè½å å ¥ï¼å°ç± JavaScript.next 宿ã彿¶ï¼JavaScript.next æçæ¯ECMAScript 6ã第å çåå¸ä»¥åï¼å°æ ECMAScript 7ãTC39 é¢è®¡ï¼ECMAScript 5 ä¼å¨2013å¹´çå¹´ä¸æä¸º JavaScript å¼åçä¸»æµæ åï¼å¹¶å¨æ¤åäºå¹´ä¸ä¸ç´ä¿æè¿ä¸ªä½ç½®ã 2011å¹´6æï¼ECMAScript 5.1çåå¸ï¼å¹¶ä¸æä¸º ISO å½é æ åï¼ISO/IEC 16262:2011ï¼ãå°äº2012å¹´åºï¼ææä¸»è¦æµè§å¨é½æ¯æ ECMAScript 5.1ççå ¨é¨åè½ã 2013å¹´3æï¼ECMAScript 6 èæ¡å»ç»ï¼ä¸åæ·»å æ°åè½ãæ°çåè½è®¾æ³å°è¢«æ¾å° ECMAScript 7ã 2013å¹´12æï¼ECMAScript 6 èæ¡åå¸ãç¶åæ¯12个æç讨论æï¼å¬ååæ¹åé¦ã 2015å¹´6æï¼ECMAScript 6 æ£å¼åå¸ï¼å¹¶ä¸æ´å为âECMAScript 2015âãè¿æ¯å 为 TC39 å§åä¼è®¡åï¼ä»¥åæ¯å¹´åå¸ä¸ä¸ª ECMAScript ççæ¬ï¼ä¸ä¸ä¸ªçæ¬å¨2016å¹´åå¸ï¼ç§°ä¸ºâECMAScript 2016âï¼2017å¹´åå¸âECMAScript 2017âï¼ä»¥æ¤ç±»æ¨ã ## å¨è¾¹å¤§äºè®° JavaScript ä¼´éçäºèç½çåå±ä¸èµ·åå±ãäºèç½å¨è¾¹ææ¯çå¿«éåå±ï¼åºæ¿åæ¨å¨äº JavaScript è¯è¨çåå±ãä¸é¢ï¼å顾ä¸ä¸ JavaScript çå¨è¾¹åºç¨åå±ã 1996å¹´ï¼æ ·å¼è¡¨æ å CSS 第ä¸çåå¸ã 1997å¹´ï¼DHTMLï¼Dynamic HTMLï¼å¨æ HTMLï¼åå¸ï¼å è®¸å¨ææ¹åç½é¡µå 容ãè¿æ å¿ç DOM 模å¼ï¼Document Object Modelï¼ææ¡£å¯¹è±¡æ¨¡åï¼æ£å¼åºç¨ã 1998å¹´ï¼Netscape å ¬å¸å¼æºäºæµè§å¨ï¼è¿å¯¼è´äº Mozilla 项ç®çè¯çãå 个æåï¼ç¾å½å¨çº¿ï¼AOLï¼å®£å¸å¹¶è´ Netscapeã 1999å¹´ï¼IE 5é¨ç½²äº XMLHttpRequest æ¥å£ï¼å 许 JavaScript ååº HTTP 请æ±ï¼ä¸ºåæ¥å¤§è¡å ¶éç Ajax åºç¨åé äºæ¡ä»¶ã 2000å¹´ï¼KDE 项ç®éåäºæµè§å¨å¼æ KHTMLï¼ä¸ºåæ¥ç WebKit å Blink 弿æä¸åºç¡ãè¿ä¸å¹´ç10æ23æ¥ï¼KDE 2.0åå¸ï¼ç¬¬ä¸æ¬¡å° KHTML æµè§å¨å æ¬å ¶ä¸ã 2001å¹´ï¼å¾®è½¯å ¬å¸æ¶é5å¹´ä¹åï¼åå¸äº IE æµè§å¨çä¸ä¸ä¸ªçæ¬ Internet Explorer 6ãè¿æ¯å½æ¶æå è¿çæµè§å¨ï¼å®åæ¥ç»æ²»äºæµè§å¨å¸åºå¤å¹´ã 2001å¹´ï¼Douglas Crockford æåºäº JSON æ ¼å¼ï¼ç¨äºå代 XML æ ¼å¼ï¼è¿è¡æå¡å¨åç½é¡µä¹é´çæ°æ®äº¤æ¢ãJavaScript å¯ä»¥åçæ¯æè¿ç§æ ¼å¼ï¼ä¸éè¦é¢å¤é¨ç½²ä»£ç ã 2002å¹´ï¼Mozilla 项ç®åå¸äºå®çæµè§å¨ç第ä¸çï¼åæ¥èµ·å为 Firefoxã 2003å¹´ï¼è¹æå ¬å¸åå¸äº Safari æµè§å¨ç第ä¸çã 2004å¹´ï¼Google å ¬å¸åå¸äº Gmailï¼ä¿æäºäºèç½åºç¨ç¨åºï¼Web Applicationï¼è¿ä¸ªæ¦å¿µçè¯çãç±äº Gmail æ¯å¨4æ1æ¥åå¸çï¼å¾å¤äººèµ·å以为è¿åªæ¯ä¸ä¸ªç©ç¬ã 2004å¹´ï¼Dojo æ¡æ¶è¯çï¼ä¸ºä¸åæµè§å¨æä¾äºå䏿¥å£ï¼å¹¶ä¸ºä¸»è¦åè½æä¾äºä¾¿å©çè°ç¨æ¹æ³ãè¿æ å¿ç JavaScript ç¼ç¨æ¡æ¶çæ¶ä»£å¼å§æ¥ä¸´ã 2004å¹´ï¼WHATWG ç»ç»æç«ï¼è´åäºå é HTML è¯è¨çæ ååè¿ç¨ã 2005å¹´ï¼è¹æå ¬å¸å¨ KHTML 弿åºç¡ä¸ï¼å»ºç«äº WebKit 弿ã 2005å¹´ï¼Ajax æ¹æ³ï¼Asynchronous JavaScript and XMLï¼æ£å¼è¯çï¼Jesse James Garrett åæäºè¿ä¸ªè¯æ±ãå®å¼å§æµè¡çæ å¿æ¯ï¼2æä»½åå¸ç Google Maps 项ç®å¤§ééç¨è¯¥æ¹æ³ãå®å ä¹æäºæ°ä¸ä»£ç½ç«çæ ååæ³ï¼ä¿æäº Web 2.0æ¶ä»£çæ¥ä¸´ã 2005å¹´ï¼Apache åºéä¼åå¸äº CouchDB æ°æ®åºãè¿æ¯ä¸ä¸ªåºäº JSON æ ¼å¼çæ°æ®åºï¼å¯ä»¥ç¨ JavaScript 彿°å®ä¹è§å¾åç´¢å¼ãå®å¨æ¬è´¨ä¸æå«äºä¼ ç»çå ³ç³»åæ°æ®åºï¼æ è¯ç NoSQL ç±»åçæ°æ®åºè¯çã 2006å¹´ï¼jQuery 彿°åºè¯çï¼ä½è 为John ResigãjQuery 为æä½ç½é¡µ DOM ç»ææä¾äºé常强大æç¨çæ¥å£ï¼æä¸ºäºä½¿ç¨æå¹¿æ³ç彿°åºï¼å¹¶ä¸è®© JavaScript è¯è¨çåºç¨é¾åº¦å¤§å¤§éä½ï¼æ¨å¨äºè¿ç§è¯è¨çæµè¡ã 2006å¹´ï¼å¾®è½¯å ¬å¸åå¸ IE 7ï¼æ å¿éæ°å¼å§å¯å¨æµè§å¨çå¼åã 2006å¹´ï¼Googleæ¨åº Google Web Toolkit 项ç®ï¼ç¼©å为 GWTï¼ï¼æä¾ Java ç¼è¯æ JavaScript çåè½ï¼å¼åäºå°å ¶ä»è¯è¨è½¬ä¸º JavaScript çå æ²³ã 2007å¹´ï¼Webkit å¼æå¨ iPhone ææºä¸å¾å°é¨ç½²ã宿ååºäº KDE 项ç®ï¼2003å¹´è¹æå ¬å¸é¦å éç¨ï¼2005年弿ºãè¿æ å¿ç JavaScript è¯è¨å¼å§è½å¨ææºä¸ä½¿ç¨äºï¼æå³çæå¯è½ååºå¨æ¡é¢çµèåææºä¸é½è½ä½¿ç¨çç¨åºã 2007å¹´ï¼Douglas Crockford å表äºå为ãJavaScript: The good partsãçæ¼è®²ï¼æ¬¡å¹´ç± O'Reilly åºç社åºçãè¿æ å¿ç软件è¡ä¸å¼å§ä¸¥èå¯¹å¾ JavaScript è¯è¨ï¼å¯¹å®çè¯æ³å¼å§éæ°è®¤è¯ï¼ 2008å¹´ï¼V8 ç¼è¯å¨è¯çãè¿æ¯ Google å ¬å¸ä¸º Chrome æµè§å¨èå¼åçï¼å®çç¹ç¹æ¯è®© JavaScript çè¿è¡åå¾é常快ã宿é«äº JavaScript çæ§è½ï¼æ¨å¨äºè¯æ³çæ¹è¿åæ ååï¼æ¹åå¤ç对 JavaScript çä¸ä½³å°è±¡ãåæ¶ï¼V8 æ¯å¼æºçï¼ä»»ä½äººæ³è¦ä¸ç§å¿«éçåµå ¥å¼èæ¬è¯è¨ï¼é½å¯ä»¥éç¨ V8ï¼è¿æå±äº JavaScript çåºç¨é¢åã 2009å¹´ï¼Node.js 项ç®è¯çï¼åå§äººä¸º Ryan Dahlï¼å®æ å¿ç JavaScript å¯ä»¥ç¨äºæå¡å¨ç«¯ç¼ç¨ï¼ä»æ¤ç½ç«çå端åå端å¯ä»¥ä½¿ç¨åä¸ç§è¯è¨å¼åãå¹¶ä¸ï¼Node.js å¯ä»¥æ¿åå¾å¤§çå¹¶åæµéï¼ä½¿å¾å¼åæäºäºèç½å¤§è§æ¨¡ç宿¶åºç¨åå¾å®¹æã 2009å¹´ï¼Jeremy Ashkenas åå¸äº CoffeeScript çæåçæ¬ãCoffeeScript å¯ä»¥è¢«è½¬æ¢ä¸º JavaScript è¿è¡ï¼ä½æ¯è¯æ³è¦æ¯ JavaScript ç®æ´ãè¿å¼å¯äºå ¶ä»è¯è¨è½¬ä¸º JavaScript ç飿½®ã 2009å¹´ï¼PhoneGap 项ç®è¯çï¼å®å° HTML5 å JavaScript å¼å ¥ç§»å¨è®¾å¤çåºç¨ç¨åºå¼åï¼ä¸»è¦é对 iOS å Android å¹³å°ï¼ä½¿å¾ JavaScript å¯ä»¥ç¨äºè·¨å¹³å°çåºç¨ç¨åºå¼åã 2009ï¼Google åå¸ Chrome OSï¼å·ç§°æ¯ä»¥æµè§å¨ä¸ºåºç¡å屿çæä½ç³»ç»ï¼å è®¸ç´æ¥ä½¿ç¨ JavaScript ç¼ååºç¨ç¨åºã类似ç项ç®è¿æ Mozilla ç Firefox OSã 2010å¹´ï¼ä¸ä¸ªéè¦ç项ç®è¯çï¼å嫿¯ NPMãBackboneJS å RequireJSï¼æ å¿ç JavaScript è¿å ¥æ¨¡ååå¼åçæ¶ä»£ã 2011å¹´ï¼å¾®è½¯å ¬å¸åå¸ Windows 8æä½ç³»ç»ï¼å° JavaScript ä½ä¸ºåºç¨ç¨åºçå¼åè¯è¨ä¹ä¸ï¼ç´æ¥æä¾ç³»ç»æ¯æã 2011å¹´ï¼Google åå¸äº Dart è¯è¨ï¼ç®çæ¯ä¸ºäºç»æ JavaScript è¯è¨å¨æµè§å¨ä¸çåæï¼æä¾æ´åçãæ´å¼ºå¤§çè¯æ³ååè½ãChromiumæµè§å¨æå ç½®ç Dart èææºï¼å¯ä»¥è¿è¡ Dart ç¨åºï¼ä½ Dart ç¨åºä¹å¯ä»¥è¢«ç¼è¯æ JavaScript ç¨åºè¿è¡ã 2011å¹´ï¼å¾®è½¯å·¥ç¨å¸[Scott Hanselman](http://www.hanselman.com/blog/JavaScriptIsAssemblyLanguageForTheWebSematicMarkupIsDeadCleanVsMachinecodedHTML.aspx)æåºï¼JavaScript å°æ¯äºèç½çæ±ç¼è¯è¨ãå ä¸ºå®æ æä¸å¨ï¼è䏿£å¨åå¾è¶æ¥è¶å¿«ãå ¶ä»è¯è¨çç¨åºå¯ä»¥è¢«è½¬æ JavaScript è¯è¨ï¼ç¶å卿µè§å¨ä¸è¿è¡ã 2012å¹´ï¼å页é¢åºç¨ç¨åºæ¡æ¶ï¼single-page app frameworkï¼å¼å§å´èµ·ï¼AngularJS 项ç®å Ember 项ç®é½åå¸äº1.0çæ¬ã 2012å¹´ï¼å¾®è½¯åå¸ TypeScript è¯è¨ã该è¯è¨è¢«è®¾è®¡æ JavaScript çè¶ éï¼è¿æå³çææ JavaScript ç¨åºï¼é½å¯ä»¥ä¸ç»ä¿®æ¹å°å¨ TypeScript ä¸è¿è¡ãåæ¶ï¼TypeScript æ·»å äºå¾å¤æ°çè¯æ³ç¹æ§ï¼ä¸»è¦ç®çæ¯ä¸ºäºå¼å大åç¨åºï¼ç¶åè¿å¯ä»¥è¢«ç¼è¯æ JavaScript è¿è¡ã 2012å¹´ï¼Mozilla åºéä¼æåº [asm.js](http://asmjs.org/) è§æ ¼ãasm.js æ¯ JavaScript çä¸ä¸ªåéï¼ææç¬¦å asm.js çç¨åºé½å¯ä»¥å¨æµè§å¨ä¸è¿è¡ï¼å®çç¹æ®ä¹å¤å¨äºè¯æ³æä¸¥æ ¼éå®ï¼å¯ä»¥è¢«å¿«éç¼è¯ææ§è½è¯å¥½çæºå¨ç ãè¿æ ·åçç®çï¼æ¯ä¸ºäºç»å ¶ä»è¯è¨æä¾ä¸ä¸ªç¼è¯è§èï¼ä½¿å ¶å¯ä»¥è¢«ç¼è¯æé«æç JavaScript 代ç ãåæ¶ï¼Mozilla åºéä¼è¿åèµ·äº [Emscripten](https://github.com/kripken/emscripten/wiki) 项ç®ï¼ç®æ å°±æ¯æä¾ä¸ä¸ªè·¨è¯è¨çç¼è¯å¨ï¼è½å¤å° LLVM çä½ä»£ç ï¼bitcodeï¼è½¬ä¸º JavaScript 代ç ï¼å¨æµè§å¨ä¸è¿è¡ãå 为大é¨å LLVM ä½ä»£ç 齿¯ä» C / C++ è¯è¨çæçï¼è¿æå³ç C / C++ å°å¯ä»¥å¨æµè§å¨ä¸è¿è¡ãæ¤å¤ï¼Mozilla æä¸è¿æ [LLJS](http://mbebenita.github.io/LLJS/) ï¼å° JavaScript 转为 C 代ç ï¼é¡¹ç®å [River Trail](https://github.com/RiverTrail/RiverTrail/wiki) ï¼ä¸ä¸ªç¨äºå¤æ ¸å¿å¤çå¨ç ECMAScript æ©å±ï¼é¡¹ç®ãç®åï¼å¯ä»¥è¢«ç¼è¯æ JavaScript ç[è¯è¨å表](https://github.com/jashkenas/coffee-script/wiki/List-of-languages-that-compile-to-JS)ï¼å ±æå°è¿40ç§è¯è¨ã 2013å¹´ï¼Mozilla åºéä¼åå¸ææºæä½ç³»ç» Firefox OSï¼è¯¥æä½ç³»ç»çæ´ä¸ªç¨æ·çé¢é½ä½¿ç¨ JavaScriptã 2013å¹´ï¼ECMA æ£å¼æ¨åº JSON ç[å½é æ å](http://www.ecma-international.org/publications/standards/Ecma-404.htm)ï¼è¿æå³ç JSON æ ¼å¼å·²ç»åå¾ä¸ XML æ ¼å¼ä¸æ ·éè¦åæ£å¼äºã 2013å¹´5æï¼Facebook åå¸ UI æ¡æ¶åº Reactï¼å¼å ¥äºæ°ç JSX è¯æ³ï¼ä½¿å¾ UI å±å¯ä»¥ç¨ç»ä»¶å¼åï¼åæ¶å¼å ¥äºç½é¡µåºç¨æ¯ç¶ææºçæ¦å¿µã 2014å¹´ï¼å¾®è½¯æ¨åº JavaScript ç Windows åº WinJSï¼æ å¿å¾®è½¯å ¬å¸å ¨é¢æ¯æ JavaScript ä¸ Windows æä½ç³»ç»çèåã 2014å¹´11æï¼ç±äºå¯¹ Joyent å ¬å¸åæ Node 项ç®ã以å该项ç®è¿å±ç¼æ ¢ç䏿»¡ï¼ä¸é¨åæ ¸å¿å¼åè 离å¼äº Node.jsï¼åé äº io.js 项ç®ï¼è¿æ¯ä¸ä¸ªæ´å¼æ¾ãæ´æ°æ´é¢ç¹ç Node.js çæ¬ï¼å¾çæ¶é´å å°±åå¸å°äº2.0çãä¸ä¸ªæåï¼Joyent å ¬å¸å®£å¸æ¾å¼å¯¹ Node 项ç®çæ§å¶ï¼å°å ¶è½¬äº¤ç»æ°æç«ç弿¾æ§è´¨ç Node åºéä¼ãéåï¼io.js 项ç®å®£å¸åå½ Nodeï¼ä¸¤ä¸ªçæ¬å°åå¹¶ã 2015å¹´3æï¼Facebook å ¬å¸åå¸äº React Native 项ç®ï¼å° React æ¡æ¶ç§»æ¤å°äºææºç«¯ï¼å¯ä»¥ç¨æ¥å¼åææº Appãå®ä¼å° JavaScript 代ç 转为 iOS å¹³å°ç Objective-C 代ç ï¼æè Android å¹³å°ç Java 代ç ï¼ä»è为 JavaScript è¯è¨å¼å髿§è½çåç App æå¼äºä¸æ¡éè·¯ã 2015å¹´4æï¼Angular æ¡æ¶å®£å¸ï¼2.0 çå°åºäºå¾®è½¯å ¬å¸çTypeScriptè¯è¨å¼åï¼è¿çäºä¸º JavaScript è¯è¨å¼å ¥äºå¼ºç±»åã 2015å¹´5æï¼Node 模å管çå¨ NPM è¶ è¶ CPANï¼æ å¿ç JavaScript æä¸ºä¸çä¸è½¯ä»¶æ¨¡åæå¤çè¯è¨ã 2015å¹´5æï¼Google å ¬å¸ç Polymer æ¡æ¶åå¸1.0çã该项ç®çç®æ æ¯ç产ç¯å¢å¯ä»¥ä½¿ç¨ WebComponent ç»ä»¶ï¼å¦æè½å¤è¾¾å°ç®æ ï¼Web å¼åå°è¿å ¥ä¸ä¸ªå ¨æ°ç以ç»ä»¶ä¸ºå¼ååºç¡çé¶æ®µã 2015å¹´6æï¼ECMA æ ååç»ç»æ£å¼æ¹åäº ECMAScript 6 è¯è¨æ åï¼å®å为ãECMAScript 2015 æ åããJavaScript è¯è¨æ£å¼è¿å ¥äºä¸ä¸ä¸ªé¶æ®µï¼æä¸ºä¸ç§ä¼ä¸çº§çãå¼åå¤§è§æ¨¡åºç¨çè¯è¨ãè¿ä¸ªæ å仿åºå°æ¹åï¼åæ¶10å¹´ï¼è JavaScript è¯è¨ä»è¯çè³ä»ä¹å·²ç»20å¹´äºã 2015å¹´6æï¼Mozilla å¨ asm.js çåºç¡ä¸åå¸ WebAssembly 项ç®ãè¿æ¯ä¸ç§ JavaScript 弿çä¸é´ç æ ¼å¼ï¼å ¨é¨é½æ¯äºè¿å¶ï¼ç±»ä¼¼äº Java çåèç ï¼æå©äºç§»å¨è®¾å¤å è½½ JavaScript èæ¬ï¼æ§è¡é度æé«äº 20+ åãè¿æå³çå°æ¥ç软件ï¼ä¼åå¸ JavaScript äºè¿å¶å ã 2016å¹´6æï¼ãECMAScript 2016 æ åãåå¸ãä¸åä¸å¹´åå¸ççæ¬ç¸æ¯ï¼å®åªå¢å äºä¸¤ä¸ªè¾å°çç¹æ§ã 2017å¹´6æï¼ãECMAScript 2017 æ åãåå¸ï¼æ£å¼å¼å ¥äº async 彿°ï¼ä½¿å¾å¼æ¥æä½çåæ³åºç°äºæ ¹æ¬çååã 2017å¹´11æï¼ææä¸»æµæµè§å¨å ¨é¨æ¯æ WebAssemblyï¼è¿æå³çä»»ä½è¯è¨é½å¯ä»¥ç¼è¯æ JavaScriptï¼å¨æµè§å¨è¿è¡ã ## åè龿¥ - Axel Rauschmayer, [The Past, Present, and Future of JavaScript](http://oreilly.com/javascript/radarreports/past-present-future-javascript.csp) - John Dalziel, [The race for speed part 4: The future for JavaScript](http://creativejs.com/2013/06/the-race-for-speed-part-4-the-future-for-javascript/) - Axel Rauschmayer, [Basic JavaScript for the impatient programmer](http://www.2ality.com/2013/06/basic-javascript.html) - resin.io, [Happy 18th Birthday JavaScript! A look at an unlikely past and bright future](http://resin.io/happy-18th-birthday-javascript/)