JavaScriptã¯çŸåšãå°çäžã§æã人æ°ã®ããèšèªã§ãã JavaScriptãïŒWebäžã®ç¬å 以å€ã§ïŒäººæ°ãåããçç±ã¯ããã®æ°äž»çãªæ§è³ªã§ãã æç¶ãåã®ã¹ã¿ã€ã«ã§ããªããžã§ã¯ãæåã§æ©èœçãªããã°ã©ãã³ã°ãå¯èœã§ãã éçºè ã«æå°éã®å¶éã課ãããæããããå®è¡ã§ããããã«ããŸãã ãããç®èãªããšã«ããã³ã»ã³ã¹ãªããšã¯ããã¯ã©ã¹ã®ã¿ã¹ã¯ã«é©çšãããå¥ã®ã¯ã©ã¹ã«é©çšãããã®ã¯é©å以äžã§ãã äŒèª¬ã«ããã°ãJavaScriptã¯2é±éã§äœæãããŸããã ç¹°ãè¿ãã«ãªããŸããããã®ãããªç¶æ³ã§ã®äººçã®ç®èã¯ãèšèªã«æãéèŠãªãã®ã ãã眮ãããšãå¯èœã§ããã äœå㪠ãäŒçµ±çãªããæ£ããã ãã¹ãŠãæ®ããŸãã èšèªã®æåã®ããŒãžã§ã³ã¯éåžžã«ã³ã³ãã¯ãã§ç°¡æœã§ããããšãå€æããŸããã ãããã®get / setãconstãawaitã¯ãã¹ãŠãåŸã§ç»å ŽããŸããã ãã®èšèªã®æåã®ååã¯éåžžã«åªããŠããããã10幎éïŒ1999幎ãã2009幎ãŸã§ïŒãèšèªã¯äœã®å€æŽããªãçãç¶ããŸããã ãã¡ãããMicrosoftãMozillaã®ããªã·ãŒãªã©ãããã«ã¯åŠå®çãªçç±ããããŸããããä»ã®äººæ°ã®ããèšèªã®å€ããåããã¹ãã«åæ Œãããã®åŸäžæããããšã¯ãªããšç¢ºä¿¡ããŠããŸãã 10幎éæŽæ°ãããªãã£ãåŸãTypeScriptãŸãã¯Rustãã©ããªããæ³åããŠã¿ãŠãã ããã JavaScriptãçãæ®ã£ãçç±ã¯éåžžã«åçŽã§ã;ããã¯1ã€ã®åé¡ã解決ããå®å šã«ãããããŸãã
JavaScriptã¯ãæ§æç³ãŸãã¯ã¯ãŒã«ãªæ©èœã®ã»ããã§ãããšäž»åŒµããŠããŸãã ãããã°ã©ããŒã¯èªåã§èšè¿°/æ¥ç¶ã§ããŸãã JavaScriptã¯ãããã€ã¹ã®ããŒããŠã§ã¢ããŠãŒã¶ãŒããé ãã ããžãã¯ã§äœã§ãã§ããããã«ãããã®ãŸãŸã«ããŠãããŸã ã evalãå¿ èŠã§ãã-ãªããžã§ã¯ããåå®çŸ©ããŠãã ãã-åé¡ã¯ãããŸãããé¢æ°ã«æž¡ãããšã¯ãäžå¯èœãã§ã-ãããããããã¯ããªãã®é ã§ã®ã¿ãäžå¯èœãã ããã§ãã GoãŸãã¯CïŒããã°ã©ããŒã¯ããªããããè¯ãã®ãç解ããã®ãéåžžã«é£ãããšæããŠããŸãã 圌ãã®åžœåã«ææŠããªãããã«ããããã¯çŸããèšèªã§ããããŸã£ããç°ãªã£ãŠããŸãã å€å žçã«ãèšèªã¯ãåãã§ãã¯ãããŸããŸãªå¿ é ã®ãã¹ããã©ã¯ãã£ã¹ãªã©ãããã°ã©ããŒãèªåã®è¶³ãæãŠãªãããã«ããéå£ãèšããŠããŸãã JavaScriptã«ã¯ãããã®éå£ããªããã©ãã«ã§ãæã€æš©å©ãããã0.01ïŒ ã®å Žåãèã§æã€ããšãçã«ããªã£ãŠããŸãã ããã¯ã¹ããŒãã«ãŒãšæ¯èŒã§ããŸããå€ãã®èšèªã§ã¯ãäžéšã®æ©èœããããã¯ãããŠããŸãããJavaScriptã§ã¯ãããã¯ãããŠããŸããã é転ãäžååãªå Žå-ãã€ãã¹ãå±éºãªã©ãããããŸããããèšèªãã¢ãŒããã¯ãã£ããã©ãã€ã ãå®éã«ç解ãããã¹ãŠã®äœ¿çšæ¹æ³ãç¥ã£ãŠããå Žå-äžè¬çãªã¿ã¹ã¯ã§ã¯JavaScriptãããåªããŠããŸãèŠã€ããããªãã ãã©ã€ããŒãã®å Žåãäžè¬çã«ã¯ãæ®éçã§ããã客芳çã«ã¯äžå¯èœã§ãã å€ãã®äººã¯ãJavaã§ã¯èŸæžãäœæã§ããJSãªããžã§ã¯ãã®é¡äŒŒç©ã§ãããPythonãšRubyãåä»ããããªããå€ãã®evalãšduckã®åä»ããããããJavaScriptã®ããã«äœ¿ãããããšäž»åŒµããŸãã ããšãã°Javaã§ã¯ãèŸæžã¯åä»ãã®ã¯ã©ã¹æåãã¬ãŒã ã¯ãŒã¯ã«è¿œå ãããã ãã§ãããJavaScriptã§ã¯ãããã¯èšèªã®ã³ã¢ã§ããã2ã€ã® "{}"æåã§äœæãããŸãã ã¹ããŒãã«ãŒã®å Žåãã¢ãã¿ãŒããŒããŒã¯3ã€ã®ãã¿ã³ãšã¬ããŒã§ã¯ãªããå³æã®èŠªæã®äžã«ãã1ã€ã®ãã¿ã³ã«ãã£ãŠåŒã³åºãããããã§ãã èªç±ã¯åã«å¯èœã§ããã ãã§ãªãã奚å±ãããŠããŸãã
圌ãã¯é¡ãå£ããªãããã«æ £ããŠãããããããã¯å€ãã®äººãmanyè¿·ã«é¥ããŸãã WindowsããLinuxã«åãæ¿ãããããªãã®ã§ãã ãsudo rm -Rf /ãšå ¥åãããšããã¹ãŠãå£ããŸããã ã·ã¹ãã ã§ã¯ãªããr ...ããã ãã®ãããªèæ ®äºé ã«ããããã¹ã¿ãŒãžã®ãã¹ã¯éåžžã«é·ããªããŸãã JavaScriptãå ¥åããããã®ãããå€ã¯éåžžã«äœããŸãŸã§ãããå€ãã®åå¿è ã¯ãèªåãç解ããŠããªããã®ãscãçç±ãäžããŠããŸãã ããã«ã人ã¯Lispã§20幎ã®çµéšãæã€ããšãã§ããŸãããJavaScriptã§ã¯ãã¹ããŒããªã©ã®ããã¥ã¡ã³ããèªãã§ããŸããã§ããã ããã¯åçŽãªããã°ã©ã ãæžãã®ã«ååã§ããã人ããªãç<2 ===çã§ããããªããããæ£ããè«ççã§ããããç解ãããå Žåãåå€æã«ã€ããŠèªãå¿ èŠããããçæ³çã«ã¯ãã¹ãŠã®ããã¥ã¡ã³ãïŒãŸãã¯è¯ããã«ããã¯ïŒã¯ããã§ã¯ãããŸããé·ãéã
ããã§ããã€ã³ãã«é¢ããæ¹å€ã«çããŸãã
質å1ïŒã·ã³ã°ã«ã¹ã¬ããã©ã³ã¿ã€ã
ããã¯éåžžã«äŸ¿å©ã§ããªããžã§ã¯ãã®ããã¯ãšæææš©ãããã³ãã«ãã¹ã¬ããã®ãã®ä»ã®æ©èœã«åé¡ã¯ãããŸããã ãªããã«ãã¹ã¬ãããå¿ èŠãªã®ã§ããïŒ é·ãæäœãå®äºããã®ãåŸ ã£ãŠããéã«ããã°ã©ã ãããã«å®è¡ããŸããïŒ Kolbeksã¯ãããã¯ããã«æ¹åããŸãã 1ã€ã®äžèŠæš¡ãã·ã³äžã®NodeJSã¯ã100,000ã®æ¥ç¶ãä¿æã§ããŸãã ã³ãŒã«ããã¯ããããŒã¢ãããŒãã«çœ®ãæããå Žåãããã€ã«ãªããŸããïŒ ãã«ãããã»ããµãã·ã³ã§ã¯ãjsã¯ããŒã«ã«ã¯ã©ã¹ã¿ãŒã®èµ·åã«å¯Ÿå¿ããŸãã 8ã³ã¢-8ããã»ã¹ã16ã³ã¢-16ããã»ã¹ãããããç¬ç«ããŠãããå éšã¯åçŽã§ãã ããã¯ã800äžäººã®ãŠãŒã¶ãŒããããªã³ã©ã€ã³ã²ãŒã ã®ã¡ã€ã³ãµãŒããŒãã¯ãããžãŒãšããŠã®ã¢ããªã±ãŒã·ã§ã³ã®å®äŸã§ãã éåæ/ã¹ã¬ããã®æäœã¯åŒ±ç¹ã§ã¯ãããŸããããJavaScriptã®æã匷åãªå©ç¹ã®1ã€ã§ãã ããã«ã¯åèšç·Žãšç¿æ £ã®å€æŽãå¿ èŠãããããŸããããç§ãä¿¡ããŠãã ãããããªãã¯å€ããåŸãã§ãããã
質å2ïŒã¢ãžã¥ãŒã«ã®å®è£ ã®ããã®çµ±äžã·ã¹ãã /æšæºã®æ¬ åŠ
JavaScriptã«ã¯ãã¢ãžã¥ãŒã«ãæäœããããã®2ã€ã®äž»ãªãªãã·ã§ã³ããããŸãã
- å ¬åŒãèŒžå ¥ãéããŠ
- ãããŠåŸæ¥ã®
ã©ã¡ãã®æ¹æ³ãããŸãæ©èœããçžäºã«å®å šã«äºææ§ããããŸãã 奜ã¿ã®æ¹æ³ãéžæã§ããŸãã ããšãã°ãç§ã¯requireã奜ãããããã¯ãªãŒããŒã©ã€ãã§ããããã§ãããããã¯JavaScriptã®å²åŠã«ãã£ãšæ²¿ã£ãŠããã ããã¯ãããšãã°ãããªããã»ããµãäœæãããšããªã©ã«æå³ããããŸãã 2ã€ã®ãäž»ãªããªãã·ã§ã³ã¯ãJavaScriptã³ãã¥ããã£ãããããé©æ°ã«å¯ŸããŠãªãŒãã³ã§ãããã¢ãžã¥ãŒã«ãæäœããããã®3çªç®ã4çªç®ã1000çªç®ã®ã·ã¹ãã ãäœæã§ããããã§ãïŒå€ãã¯æ¢ã«äœææžã¿ã§ãïŒã ãã1ã€ã®è³ªåã¯ããããžã§ã¯ãã®å€éšã§äœ¿çšãããã©ããã§ãã èšèŒãããŠãã2ã€ã®æ¹æ³ã¯ãWebéçºã®äºå®äžã®æšæºã§ãïŒæšæºã«èå³ãããå ŽåïŒã
質å3ïŒãããžã§ã¯ãã®æ§é ã«é¢ããå ±éã®æšæºã®æ¬ åŠïŒèª°ããæãããšãããŸãããœãŒã¹ã³ãŒããç解ããããšã¯éåžžã«å°é£ã§ãïŒ
ç§ã¯ã圌ããæãããšããããååã«åæ ããŸãã ãŸãã¯ããªããšååã ååãšããŠãWebéçºã«ã¯ããã€ãã®å žåçãªãããžã§ã¯ãæ§é ããããŸããããã®ãã¡ã®1ã€ã䜿çšãããŸãããããã¯ã©ãã«ãä»®å®ãããŠããããéœåã®è¯ãèŠæ¹ã«åºã¥ããŠèª°ã§ãããã°ã©ã ãæžãããšãã§ããŸãã äœã欲ããã£ãïŒ ããã¯å°çäžã§æã人æ°ã®ããèšèªã§ãããDSLã®äžçš®ã§ã¯ãããŸããã JSã¢ããªã±ãŒã·ã§ã³ããšã«ç°ãªãæšæºããããåœç¶ã§ãã ç·Žç¿ã«é¢ããŠã¯ãããšãã°ãã©ã€ãã©ãªã®é£èªåãããã³ãŒããéåžžã«ããèªãã§ããŸãã çµéšãç©ãã§ãäžè¬çãªãã¿ãŒã³ãåŠã³ãŸãã
質å4ïŒæé»ã®ïŒãããŠæã«ã¯å¥åŠãªïŒå€æã䌎ã匱ãå
誰ã®ããã«å¥åŠãªã®ïŒ JavaãCïŒãPHPãPythonãLispããŸãã¯Amsããã°ã©ããŒã§ããïŒ asmã¯å¥åŠã§ã¯ãªããšèšããŸããïŒ Lispã¯ã©ãã§ããïŒ äžçã¯ããªãã®å¥œããªèšèªãããã¯ããã«è±ãã§ãããäžéšã®äººã«ãšã£ãŠå¥åŠãªããšã¯ä»ã®äººã«ãšã£ãŠã¯æ®éã§ãã å°ãªããšãHaskellãšãã®ã¢ãããšãã¡ã³ã¯ã¿ãŒãèŠãŠãã ããïŒãšããã§ãéåžžã«åŒ·åãªãã®ããããã¯JSãjQueryã§ã䜿çšãããŠããŸãïŒã ç 究æã¯ãããæããŸããã§ãããïŒ OOPã¯äžçã®ããäžéšã«ããããéåžžã«å°ãããããã¯ãããŠããããã話ãã®ãéå±ã§ãã JavaScriptã®åã¯åŒ±ãã¯ãããŸããããåºæ¬çã«ã¯åŒ±ãã¯ãããŸããïŒããªããã£ãåãé€ãïŒã WeakMapãªã©ã¯ãä»ã®èšèªããã®ç§»æ°ãåã°ããããã ãã«å°å ¥ãããŸããã ã¢ãã«ã®ã¿ã€ãã³ã°ã«ã€ããŠèªã¿çŽããããã䜿çšããããšãåŠã¶ãšãã¿ã€ãã«åé¡ã¯ãããŸããã
質å5ïŒéåžžã®ã¯ã©ã¹ã®æ¬ åŠ/ OOP
ç¹°ãè¿ãã«ãªããŸãããã¯ã©ã¹ã¯ä»ã®èšèªããã®ç§»æ°ãšIDEã®ããã«ç¹å¥ã«å°å ¥ãããŸããã NodeJSã¯ãã¡ããããã¹ãŠã®äž»èŠãªãã©ãŠã¶ãŒã§ãµããŒããããŠããŸãã JavaScriptã®OOPã¯ãä»ã®ã»ãšãã©ã®èšèªãããè±å¯ã§ãã ã¯ã©ã¹ãä»ããŠç¶æ¿ã§ãããããã¿ã€ããä»ããŠç¶æ¿ã§ããŸãã å€ãã®å ŽåãJavaScriptãããã¿ã€ãã®é©åãªäœ¿çšã¯ããéãããã䟿å©ã§ãããè«ççã§ãããããã°ã©ã ã¯ããã³ã³ãã¯ãã§èªã¿ãããã§ãã ãããããã®ããšã¯ç 究æã§æããããŠããªããããJavaScriptã³ãã¥ããã£ã¯ãããå¯èœã§ããããšã蚌æããªããã°ãªããŸããã
質å6ïŒåäžã®æ£æ°ã§åäœããéçã³ãŒãã¢ãã©ã€ã¶ãŒã®æ¬ åŠïŒundefinedã®ãããªæããªãšã©ãŒã®çŽ æŽãããäžçãžããããïŒã¯æ©èœã§ã¯ãããŸãã
ããã¯ãevalã䜿çšãããã¹ãŠã®ã€ã³ã¿ãŒããªã¿ãŒèšèªã«å ±éããåé¡ã§ããæãæããªééãã®5ïŒ ããã£ããã§ããããã«ããããã«ããã®æš©éãæŸæ£ããã®ã¯çãããèãã§ãã äžè¬ã«ãIDEã¹ã«ãŒãã®åŸãã«åžžã«é ããŠãããšã¯éãããã³ãŒãã®èŠåŸãéçºããŸãã ããã¯åè«ã§ã¯ãããŸãããã¢ãã©ã€ã¶ãŒã¯è¯ãã§ãããããªãã«ãšã£ãŠåé¡ããã®ãããªãšã©ãŒã§ããå Žå-ã©ããããããããªãã¯æ£ããããã°ã©ãã³ã°ãããŠããŸããã
質å7ïŒèšèªèªäœãŸãã¯ããŒã«ã«åæšè«ããªã
ã€ãŸããæ§æãåŠç¿ããŸãã ç¶æ³ã«å¿ãã1ã€ã®ãªãã·ã§ã³ïŒ
typeof myVar myVar.constructor
8: this ( this â ? ?)
this . myObj.func(), , this myObj. , myObj , , bind. JS, , , myObj2.func = myObj.func, . this myObj myObj2, . , , . this window undefined, strict mode. , . . , this , ? - . , , , . - , . JavaScript , C++ , , , . . , this , - « 2 , 2 , ?» . , this . , , , . JavaScript , , , PhantomJS c User-agent Chrome â .
9: pattern matching ( / â , undefined, , ? ) cannot read property foo of undefined
:
- . â
- â . , C# , Facebook . , , , .
10: â , , , async ( npm )
, , async/await â , . , , . , , . async/await , . async/await await , . async node, , JS . , ES6. , , npm ( ). Fibers, Sync, , . , , , .
11: const ( const )
, . :
const a = 5 const a = 4 VM1825:1 Uncaught SyntaxError: Identifier 'a' has already been declared at <anonymous>:1:1
â , const , . const. , // , - , JavaScript, . . .
12: npm, « »
. , github. . , , . . . , , /, . â , , Sencha. , . npm , . , .
JavaScript , , , . JavaScript. -, . JavaScript , . - .