JavaScriptã¯ãçŸä»£ã®ã€ã³ã¿ãŒãããã®é
ã
ã«æåéãèŠã€ããããšãã§ãã
çŽ æŽãããããŒã«ã§ã ã ãããããã®ä¿¡ããããªãã»ã©ã®æ®åã«ãããããããJSã®å°éå®¶ã¯åžžã«åŠã¶ã¹ãããšãæã£ãŠããŸãã 圌ããç¥ããªãäœããåžžã«ãããŸãã

ãã®èšäºã§ã¯ãçµéšè±å¯ãªéçºè
ã§ããçããããšãã§ããªãJavaScriptã«é¢ãã12ã®è³ªåã«ã€ããŠèª¬æããŸãã æåã«ãã€ã³ã¿ãã¥ãŒã§ããåºãŠãã質åãå«ã10ã®å
žåçãªè³ªåãæ±ããŸãã æ®ãã®2ã€ã®è³ªåã¯ãããè€éã§ç©è°ãéžããã®ãç¹ã«WebããŒãžã®ããã©ãŒãã³ã¹ãæ¹åããJSã®äœ¿çšãšãæéã®çµéãšãšãã«é¢é£æ§ã倱ããªãã¢ããªã±ãŒã·ã§ã³ã®éçºã«åœãŠãããŸãã
質åçªå·1ã ãããã¿ã€ãç¶æ¿ãšã¯äœã§ããïŒ
JavaScriptã®ã»ãšãã©ãã¹ãŠããªããžã§ã¯ãã§ãã åãªããžã§ã¯ãã«ã¯ãããããã£ãšã¡ãœãããç¶æ¿ãããããã¿ã€ãããããŸãã ãªããžã§ã¯ãã«èŠæ±ãããããããã£ãå«ãŸããŠããªãå ŽåãJavaScriptã¯ãªããžã§ã¯ãã®ãããã¿ã€ãã§ãã®ããããã£ãæ€çŽ¢ããŸãã ãã®å Žåãå¿
èŠãªãã®ãèŠã€ãããŸã§ããããã¿ã€ããã§ãŒã³ã«æ²¿ã£ãŠæ€çŽ¢ãå®è¡ãããŸãã æ€çŽ¢ã倱æãããšããšã©ãŒãè¿ãããŸãã
ãããã¿ã€ãã¯ãåãããããã£ãšã¡ãœãããæã€ãªããžã§ã¯ããäœæããã®ã«éåžžã«åœ¹ç«ã¡ãŸãã ããããã¹ãŠããããã¿ã€ãã¬ãã«ã§å®çŸ©ãããšããã®ãããªãšã³ãã£ãã£ã®ã³ããŒã1ã€ã ãå¿
èŠã«ãªããã¡ã¢ãªãå¹ççã«äœ¿çšã§ããŸãã
var parent = {inherit: true} var childA = Object.create(parent); var childB = {}; Object.setPrototypeOf(childB, parent); class childC extends parent {}
Object.create()
ã³ãã³ãã䜿çšããŠãããã®ãªããžã§ã¯ããäœæãããšãããŸãã¯
Object.create()
ã³ãã³ãã䜿çšããŠäœæåŸã«ãªããžã§ã¯ãã«ãããã¿ã€ãã远å ã§ããŸãã ES2015æšæºã§ã¯ãclassããŒã¯ãŒããæäŸãããŸãããŸãã
extends
ã³ãã³ããããããªããžã§ã¯ãã®ãããã¿ã€ããšããŠåŒã³åºããããšãã«æå®ãããå€ã䜿çšã§ããŸãã
質åçªå·2ã JavaScriptã䜿çšããŠWebãããžã§ã¯ãã®ã¢ã¯ã»ã·ããªãã£ãé«ããã«ã¯ã©ãããã°ããã§ããïŒ
é害ãæã€äººã
ããŠã§ããµã€ãã®ã¢ã¯ã»ã·ããªãã£ã確ä¿ããããã®ææ°ã®
ããŒã«ã¯ ãJavaScriptãšããŒãžã®åçã³ã³ãã³ãã®åŠçæ¹æ³ãããç¥ã£ãŠããŸãã JSãšåçããŒã¿ã®äž¡æ¹ãã¢ã¯ã»ã·ããªãã£ããŒã«ãšçµã¿åãããããšãã§ããŸããããã®å Žåã¯ãããšãã°ãé©åãªæäœã«çµ¶å¯Ÿã«å¿
èŠãªæ©èœã§ã¯ãªãããããžã§ã¯ãã®æ©èœãæ¡åŒµããææ®µãšããŠã¹ã¯ãªããã䜿çšããããšãæé©ã§ããããšã«çæããŠãã ããã
ãŠãŒã¶ãŒããµã€ãã§äœæ¥ã§ããããã«ããéåžžã®æ¹æ³ã¯ã察話ã§ããããŒãžã®ãªããžã§ã¯ããããã²ãŒããã䟿å©ãªææ®µãæäŸããããšã§ãã ããã¯ãã©ãŒã«ã¹å¶åŸ¡ã«ã€ããŠã§ãã ããšãã°ãã«ã¬ã³ããŒãããŒãžã«è¡šç€ºãããå ŽåããŠãŒã¶ãŒã¯ãç¹ã«ç¢å°ããŒã䜿çšããŠãããŠã¹ãªãã§ã«ã¬ã³ããŒã䜿çšã§ããå¿
èŠããããŸãã ã€ãŸããå·Šå³ã®ç¢å°ããŒã䜿çšããŠïŒç»é¢äžã®ã«ã¬ã³ããŒè¡šç€ºã®1è¡ã«7æ¥ã衚瀺ãããŠããå ŽåïŒæ¥ããšã«ç§»åããããŒãäžäžã«ç§»åããŠé±ãåãæ¿ããããšãã§ããŸãã ããã¯ãã«ã¬ã³ããŒããã©ãŒã«ã¹ãåããŠããéã«ããŒããŒãã€ãã³ãããªãã¹ã³ããããšã§å®çŸãããŸãã
éèŠãªããŒã¿ã®å€æŽãJavaScriptã䜿çšããŠå®è£
ãããŠããå Žåãããšãã°ããã£ãŒãããã¯ãã©ãŒã ãžã®å
¥åæã«ãæ°ããããŒã¿ãã¹ã¯ãªãŒã³ãªãŒããŒã«éä¿¡ããå¿
èŠããããŸãã å€ãã®å Žåãããã¯ã察å¿ããã³ã³ãããã€ã³ã¿ã©ã¯ãã£ããªé åãšããŠããŒã¯ããããšã§å®çŸãããŸãã
質åçªå·3ã ã€ãã³ããããªã³ã°ãšã¯äœã§ããïŒãŸããã€ãã³ããã£ããã£ãšã¯ã©ãéããŸããïŒ
ã€ãã³ããããªã³ã°ã¯ãã€ãã³ãå§ä»»ãå®è£
ãããšãã«äœ¿çšãããŸãã 芪èŠçŽ ã®ã€ãã³ãããµãã¹ã¯ã©ã€ããããšããã®åå«ã®ã€ãã³ãã«é¢ããæ
å ±ãååŸã§ããŸãã€ãã³ãã®ã€ã³ã¿ãŒã»ãããšãããªã³ã°ã¯ã©ã¡ãããã€ãã³ãé
ä¿¡ãšåŒã°ããããã»ã¹ã®äžéšã§ããããã®éã«ãã©ãŠã¶ãŒã¯ããŒãžã§çºçããã€ãã³ãã«å¿çããŸãã å€ããã©ãŠã¶ã¯ã©ã¡ããäžæ¹ãå®è¡ããŠããŸããããæè¿ã§ã¯ãã¹ãŠã®ãã©ãŠã¶ãã€ã³ã¿ãŒã»ãããšã€ãã³ããããªã³ã°ã®äž¡æ¹ããµããŒãããŠããŸãã
æåã®ãã§ãŒãºã§ããã€ã³ã¿ãŒã»ãããã§ãŒãºã¯ãã€ãã³ããçºçããçŽåŸã«å®è¡ãããŸãã ã€ãã³ãã¯ãã€ãã³ãã«å¿ããŠ
document
ãªããžã§ã¯ããŸãã¯
window
ãªããžã§ã¯ãã®ããããã§ããæé«ã¬ãã«ã§éå§ãã
window
ã ããããã
<html>
ãšãã®ã¿ã°ã«ãããã®ãééããçºçããèŠçŽ ã«å°éãããŸã§èœäžããŸãã
次ã«ã第2ãã§ãŒãº-ã€ãã³ãã®äžæãçºçããŸãã ãã®éçšã§ãåãããã»ã¹ãç¹°ãè¿ãããŸãããéãåæ§ã§ãã ãã¹ãŠã¯ã€ãã³ããããªã¬ãŒããèŠçŽ ããå§ãŸããã«ãŒãã®
<html>
èŠçŽ ã«ããããã¢ãããããŸãã ã€ãã³ããªã¹ãã远å ããå Žåãããã¯ã·ã¹ãã ã®åäœãäºæ³ããããšããã§ãã
質åçªå·4ã ã€ãã³ãã®å§ä»»ã¯ãå€ãã®ã€ã³ã¿ã©ã¯ãã£ããªèŠçŽ ãæã€ãµã€ãã®ã³ãŒããã©ã®ããã«æ¹åããŸããïŒ
å€ãã®å ŽåãWebãµã€ãã¯åžžã«å€åããåçãªèŠçŽ ã«æºã¡ãŠããŸãã ãã®ãããªèŠçŽ ã察話åã§ããå¿
èŠãããå ŽåããŠãŒã¶ãŒãèŠçŽ ãšå¯Ÿè©±ãããšãã«çºçããã€ãã³ããç£èŠããæ¹æ³ãå¿
èŠã«ãªããŸãã åèŠçŽ ã«ç¬èªã®ã€ãã³ããªã¹ããŒãå¿
èŠãªå Žåãããã«ããã³ãŒããæ£ãã°ãããã©ãŠã¶ã®è² è·ãå¢å ããŸãã
ã€ãã³ãå§ä»»ã¯ãã€ãã³ããããªã³ã°ã¡ã«ããºã ã䜿çšããææ³ã§ãã 芪èŠçŽ ã«ãªã¹ããŒã远å ããããšã«ãããéçºè
ã¯èªåã®åå«ã®ã€ãã³ãåŠçãèšå®ã§ããŸãã
parentEl.addEventListener('click', function(e) { if(e.target && e.target.nodeName == 'BUTTON') {
ã€ãã³ããªã¹ããŒã³ãŒã«ããã¯é¢æ°ã®å
éšã§ã¯ãã¿ãŒã²ããã€ãã³ãèŠçŽ ã¯
target
ãã©ã¡ãŒã¿ãŒã§è¡šãããããã䜿çšããŠè¿œå ã®ã¢ã¯ã·ã§ã³ã決å®ã§ããŸãã ããšãã°ããã®ãã©ã¡ãŒã¿ãŒ
data
屿§ã«ã¯ããªããžã§ã¯ãã®ããããã£ã«ã¢ã¯ã»ã¹ããããã®èå¥åã
data
ã§ããŸãã
質åçªå·5ã ã¯ããŒãžã£ãŒãšã¯äœã§ããïŒãŸããã¯ããŒãžã£ãŒã¯ã©ã®ããã«ã³ãŒããæŽçããã®ã«åœ¹ç«ã¡ãŸãã
JavaScriptã®é¢æ°ã¯ããã¬ãã·ã«ã«ã¹ã³ãŒãããšåŒã°ãããã®ã䜿çšããŸãã ããã¯ãããããå«ãŸããã¹ã³ãŒãã§å®çŸ©ããã倿°ã«ã¢ã¯ã»ã¹ã§ããããšãæå³ããŸããã颿°å
ã§å®£èšããã倿°ã¯å€éšããã¢ã¯ã»ã¹ã§ããŸããã
function outer() { let x = 'Web Designer'; function shout() { alert(`I love ${x}!`); } shout(); }
outer()
颿°ãåŒã³åºããšããI love Web DesignerïŒããšããã¡ãã»ãŒãžã衚瀺ãããŸããã
shout()
颿°ãŸãã¯
outer()
颿°ã®
outer()
x
倿°ã«ã¢ã¯ã»ã¹ããããšãããšãäž¡æ¹ãšãæªå®çŸ©ã«ãªããŸãã ã¯ããŒãžã£ã¯ã颿°ãšãã®èªåœç°å¢ã®çµã¿åããã§ãã ãã®äŸã§ã¯ãã¯ããŒãžã£ã¯
outer()
颿°ã§ãã
ã¯ããŒãžã£ãŒã¯ã1ã€ã®ã¯ããŒãžã£ãŒå
ã§å®£èšããããã¹ãŠãä»ã®ã¯ããŒãžã£ãŒã«åœ±é¿ãäžããªããããã³ã³ããŒãã³ãã®å€§ããªã»ãããäœæãããšãã«åœ¹ç«ã¡ãŸãã ã¯ããŒãžã£ãŒã䜿çšããŠãPythonãªã©ã®ä»ã®ãªããžã§ã¯ãæåèšèªã§äœ¿çšãããŠãããã®ãæãèµ·ããããæ¹æ³ã§ããã©ã€ããŒã颿°ãšå€æ°ãäœæã§ããŸãã ã¢ãžã¥ãŒã«ã¢ãžã¥ãŒã«ã¯ãã¯ããŒãžã£ãŒãåºç¯å²ã«äœ¿çšããŠãã¢ãžã¥ãŒã«ãçžäºäœçšããæ§é åãããæ¹æ³ãæäŸããŸãã
質åçªå·6ã ã³ãŒããããã¯ã®äžéšã«ãããuse strictãè¡ã®æå³ã¯äœã§ããïŒ
ES5ã§ã¯ãstrictã¢ãŒããšåŒã°ããJavaScriptã®ç¹å¥ãªããŒãžã§ã³ã«ã€ããŠèª¬æããŠããŸãã 峿 Œã¢ãŒãã§ã¯ã以åã®ããŒãžã§ã³ã®èšèªã®ãããŸããªæ§æäœã䜿çšãããšãäºæããªãåäœãçºçãã代ããã«ãšã©ãŒãçºçããŸãã
function strictFunction() { 'use strict'; myVar = 4;
äžèšã®ã³ãŒãã¹ããããã§ã¯ãæªå®£èšã®å€æ°ã«å€ãå²ãåœãŠãããšããŠããŸãã ã¹ããªã¯ãã¢ãŒã以å€ã§ã¯ããã®ãããªã³ãã³ããå®è¡ãããšã倿°
myVar
ãã°ããŒãã«ã¹ã³ãŒãã«è¿œå ãã
myVar
ãããã«ååãªæ³šæãæããªããšãã¹ã¯ãªããã®æ©èœãå®å
šã«å€æŽãããå¯èœæ§ããããŸãã 峿 Œã¢ãŒãã§ã¯ãããã«ãããšã©ãŒã¡ãã»ãŒãžã衚瀺ãããããã°ã©ã ã®èª€åäœãé²ãããšãã§ããŸãã ES2015ã¢ãžã¥ãŒã«ã¯ããã©ã«ãã§å³å¯ãªå³å¯ã¢ãŒãã䜿çšããŸããã颿°ã䜿çšããŠäœæãããã¯ããŒãžã£ãŒã§ã¯ã
'use strict'
ã³ãã³ãã颿°ã¬ãã«ãšãã¡ã€ã«ã¬ãã«å
šäœã§äœ¿çšã§ããŸãã
質åçªå·7ã JavaScriptã«é©çšãããå Žåãã倿°ãäžããããšããçšèªã¯äœãæå³ããŸããïŒ
JavaScriptã®æ©èœã®1ã€ã¯ãJavaScriptã§èšè¿°ãããããã°ã©ã ãã³ã³ãã€ã«ãããŠããªã圢åŒã§é
åžããããšããäºå®ã§ãã ãã©ãŠã¶ã¯ãããªã³ã¶ãã©ã€ãã§èšãããã«ã¹ã¯ãªãããã³ã³ãã€ã«ãããã®ããã»ã¹äžã«ããããã®ã¹ã¯ãªããã§å®£èšããã颿°ãšå€æ°ã«ã€ããŠãã¡ã¢ããåããŸãã
ã³ãŒããæåã«è¡šç€ºããåŸããã©ãŠã¶ãŒã¯2çªç®ã®ãã¹ãå®è¡ããŸããããã¯ãããã°ã©ã ã®å®è¡ã§ããã颿°ãšå€æ°ãé©çšãããå Žæãæ¢ã«èªèããŠããŸãã ã³ãŒããã©ã°ã¡ã³ããå®è¡ããããšã颿°ãšå€æ°ã®å®£èšããã®ãã©ã°ã¡ã³ãã®å
é ã«ãäžæãããŸãã
welcome("Matt"); //"Welcome, Matt." function welcome(name) { return `Welcome, ${name}.`; }
ãã®äŸã§ã¯ãã¹ã¯ãªããã®å
é ã«ãäžæããããããã³ãŒãã§å®£èšãããåã«
welcome()
颿°ã䜿çšã§ããŸãã
質åçªå·8ã ç¢å°é¢æ°ã¯éåžžã®é¢æ°ãšã©ã®ããã«éããŸããïŒ
ES2015ã¯å€ãã®å€æŽãå°å
¥ããŸãããããã®ãã¡ã®1ã€ã¯ç¢å°é¢æ°ã®å°å
¥ã§ããã
function CountUp() { this.x = 0; setInterval(() => console.log(++this.x), 1000); } var a = new CountUp();
ç¢å°é¢æ°ãšéåžžã®é¢æ°ã®äž»ãªéãã¯ãããããããçããšããäºå®ãèŠãŠããªãå Žåã§ããç¢å°é¢æ°ã¯
this
ç¬èªã®å€ãèšå®ããªã
this
ã§ãã 代ããã«ããããã¯å«ãŸããŠãã
this
ãããã¯ã®å€ã䜿çšããŸãã äžèšã®äŸã§ã¯ã
this.x
ã«ã¢ã¯ã»ã¹ãããšã1
this.x
ããšã«
this.x
æ°åã衚瀺ãããŸãã åæ§ã®ç¶æ³ã§éåžžã®é¢æ°ã䜿çšããå Žåãå€ã¯
undefined
ã
NaN
ã®çµè«ã«ãªããŸãã ç¢å°é¢æ°ã®æ¬äœã¯æ»ãå€ã§ãã ããã«ããããããã¹ã§ç¢å°é¢æ°ã䜿çšããããšãç¹ã«äŸ¿å©ã«ãªããŸãã éåžžã®é¢æ°ã¯ãç¢å°ã®é¢æ°ãšã¯ç°ãªããç¹å®ã®å€ãæç€ºçã«è¿ãå¿
èŠããããŸããããã§
undefined
å Žåã¯ã
undefined
ãèªåçã«è¿ãããŸãã
質åçªå·9ã ã©ã®ãããªç¶æ³ã§letããã³constããŒã¯ãŒãã䜿çšããå¿
èŠããããŸããïŒ
ES2015ã®ãã1ã€ã®åºæ¬çãªé©æ°ã¯ã倿°ã宣èšããå¥ã®æ¹æ³ãšããŠ
let
ããã³
const
ããŒã¯ãŒããå°å
¥ããããšã§ãã ãã®ãããªå€æ°ã®ã¹ã³ãŒãã¯ã倿°ã宣èšããããããã¯ã«å¶éãããŸãã ããã«ãããç°ãªãã³ãŒããããã¯ã§äœæããã倿°ããããã®ãããã¯ã®å€ã«ãããã®ã«åœ±é¿ãäžããªããšãã確信ãåŸãããŸãã
for(let x=1; x<=3; x++) { console.log(x); // 1, 2, 3} console.log(x); // "x is not defined"
ããã°ã©ã ã®å®è¡äžã«å€æ°ã®å€ãå€ãããªãå Žåã¯ã
let
ã§ã¯ãªã
const
ã䜿çšããŸãã ããæ£ç¢ºã«ã宿°ããšåŒã°ãããã®ãããªå€æ°ããªãŒããŒã©ã€ãããããšãããšããšã©ãŒãçæãããŸãã ãã®ã¢ãããŒãã§ã¯ã宿°ã§èšè¿°ãããåç
§ã®ãªããžã§ã¯ããšé
åã®å
éšã³ã³ãã³ãã¯å€æŽã§ããŸãããæ°ãããªããžã§ã¯ãã«çœ®ãæããããšã¯ã§ããŸããã
var
ããŒã¯ãŒãã䜿çšããŠå®£èšããã倿°ãšã¯ç°ãªãã
let
ããã³
const
ã䜿çšããŠå®£èšããã倿°ã¯
const
ããªããããåæåãããåã«ã¢ã¯ã»ã¹ã§ããŸããã ã³ãŒããããã¯ã®å
é ãšå€æ°ãåæåãããå Žæã®éã®ã¹ããŒã¹ã¯ããäžæçãªããããŸãŒã³ããšåŒã°ããå€ãã®å Žåãæ··ä¹±ã®åå ã«ãªããŸãã
質åçªå·10ã 颿°åããã°ã©ãã³ã°ãšã¯äœã§ããïŒãã®æ©èœã¯äœã§ããïŒ
ãããæ©èœé¢æ°åããã°ã©ãã³ã°ã¯ããã°ã©ã éçºãžã®ã¢ãããŒãã§ããããã®æ¬è³ªã¯ãã¢ããªã±ãŒã·ã§ã³ã®ç¶æ
ã衚ãããŒã¿ã颿°ã®ã¿ã䜿çšããŠåŠçãããããšã§ãã ãã®ãããªé¢æ°ãå¯äœçšãåŒãèµ·ãããªãå Žåãçµæã¯æ±ããããçè§£ããããã³ãŒãã«ãªããŸãã
éåžžãJSãããžã§ã¯ãã¯ããªããžã§ã¯ãæåããã°ã©ãã³ã°ã®ååã䜿çšããŠæ§ç¯ãããŸãã ããã°ã©ã ã®çŸåšã®ç¶æ
ã«é¢ããæ
å ±ã¯ãªããžã§ã¯ãã«ä¿åãããããŒãžã§äœãã倿Žããããšã倿Žã«é¢ããæ
å ±ããããã®ãªããžã§ã¯ãã«æžã蟌ãŸããŸãã
å®éã颿°åããã°ã©ãã³ã°ã¯å¥ã®èãæ¹ã§ãã FïŒã®ãããªèšèªã¯ããããã®ååãéåžžã«é·ãé䜿çšããŠãããšèšããªããã°ãªããŸããã åæã«ãES2015ã§ã¯ãJSã§ã®é¢æ°åããã°ã©ãã³ã°ã®å¯èœæ§ãåºããéèŠãªã¡ã«ããºã ãããã€ãç»å ŽããŸããã
Webãããžã§ã¯ãã®éçºæã«é¢æ°åããã°ã©ãã³ã°ã®èŠåã«åŸãå Žåããã¹ãŠã®æäœã¯ãããããçŽç²ãªã颿°å
ã§å®è¡ããå¿
èŠãããããšãèæ
®ããå¿
èŠããããŸãã ãããã¯ããããã®é¢æ°ã®ç¯å²å€ã«ããããŒã¿ã®åœ±é¿ãåããªã颿°ã§ãã ã€ãŸããåãããŒã¿ããã®ãããªé¢æ°ãè£åãå Žåãåžžã«åãçµæãè¿ãå¿
èŠããããŸãã
ããã«ãããã¯ãããšãã°ãã¢ããªã±ãŒã·ã§ã³ã®ç¶æ
ã衚ããªã©ã颿°ã®å€éšã®ç¹å®ã®ããŒã¿ãžã®å
±æã¢ã¯ã»ã¹ã颿°ã«æãããªãããšãæå³ããŸãã ã¢ããªã±ãŒã·ã§ã³ãç¶æ
ã倿Žããå¿
èŠãããå Žåããã©ã¡ãŒã¿ãšããŠé¢æ°ã«æž¡ãå¿
èŠããããŸãã
æåŸã«ãã³ãŒãã§ã¯ãæ¢åã®å€ã倿Žããªãããã«ããå¿
èŠããããŸãã ããšãã°ããªããžã§ã¯ãã®å€æŽã䌎ãæäœãå®è¡ããå Žåãå€ã倿Žããããããã®ãªããžã§ã¯ãã®ã³ããŒãè¿ãå¿
èŠããããŸãã ããã¯ããšã©ãŒãã³ãŒããã¹ãã®è€éåã«ã€ãªããå¯äœçšãåãé€ãã®ã«åœ¹ç«ã¡ãŸãã
質å11ã JavaScriptã䜿çšããŠWebããŒãžã®ããã©ãŒãã³ã¹ãåäžãããæ¹æ³
çŸåšãã»ãšãã©ã®Webãã©ãŠãžã³ã°ã¯ã¹ããŒããã©ã³ãŸãã¯ã¿ãã¬ããããå®è¡ãããŠããŸãã ãã ãã誰ããæå
端ã®ããã€ã¹ãæã£ãŠããããã§ã¯ãããŸããã ãããã£ãŠãããŒãžããŠãŒã¶ãŒã®ã¢ã¯ã·ã§ã³ã«ã©ãã ãè¿
éã«å¿çããããéåžžã«éèŠã§ãã ãµã€ãã®äœæ¥ã«ãããããã¬ãŒããã¯ãã¯ã©ã€ã¢ã³ãã倱ãå¯èœæ§ããããŸãã 幞ããªããšã«ãJavaScriptã«ã¯ãããåé¿ããã®ã«åœ¹ç«ã€ããŒã«ããããŸãã
unnecessaryäžèŠãªã¹ã¯ããŒã«å¹æãé¿ãã
åŒãè£ãããã¹ã¯ããŒã«ã¯ãããŒãžã§ããã€ãã®ããã°ã©ã ã¢ã¯ã·ã§ã³ãå®è¡ãããŠããããšã瀺ãæç¢ºãªå
åã§ãã å Žåã«ãã£ãŠã¯ãããŒãžäžã«ã€ãã³ããªã¹ããŒãååšããããããã©ãŠã¶ã¯åŒ·å¶çã«åŸ
æ©ããŸãã ãã®ããã
wheel
ã
touchmove
ãªã©ã®ã€ãã³ãã¯ã¹ã¯ããŒã«ããã£ã³ã»ã«ã§ããŸãããã®çµæãæšæºã®ã¹ã¯ããŒã«åäœãéå§ãããåã«ãã€ãã³ããçµäºãããŸã§ããŒãžã匷å¶çã«åŸ
æ©ãããŸãã
ããã«ãããããŒãžãã¹ã¯ããŒã«ãããšãã«ãžã£ã³ããçºçããé床ãäžå®ããªããªãããããŠãŒã¶ãŒãããŒãžãæäœããå°è±¡ãæªããªããŸãã
document.addEventListener('touchmove', handler, {passive: true});
ãããåé¿ããã«ã¯ãã€ãã³ããªã¹ããŒã远å ãã3çªç®ã®ãã©ã¡ãŒã¿ãŒãšããŠã
passive
ããããã£ã
true
èšå®ããããªããžã§ã¯ããæž¡ã
true
ã ãã®ãããªã€ãã³ããåŠçãããã©ãŠã¶ã¯ãã¹ã¯ããŒã«ã«åœ±é¿ãäžããªããšèŠãªãå ŽåããããŸãããã®çµæãããŒãžã®ã¹ã¯ããŒã«ã¯äžå¿
èŠãªé
å»¶ãªãã«éå§ã§ããŸãã
3çªç®ã®ãã©ã¡ãŒã¿ãŒã¯ãå€ããã©ãŠã¶ãŒã®
useCapture
ãªãã·ã§ã³ã眮ãæããããã
useCapture
ã¢ãããŒããŸãã¯ãã®ã¢ãããŒããé©çšããåã«ããã©ãŠã¶ãŒããµããŒããããã®ã確èªããå¿
èŠããããŸãã ç¹å®ã®é åãšãŠãŒã¶ãŒãšã®å¯Ÿè©±ãæå³çã«ç¡å¹ã«ããããã«ãã»ãšãã©ã®ãã©ãŠã¶ãŒã§ã¯ãCSSã§
touch-action: none
䜿çšã§ããŸãã
â調æŽã€ãã³ã
ã¹ã¯ããŒã«ãèŠçŽ ã®ãµã€ãºå€æŽãªã©ã®ã€ãã³ãã¯ã§ããã ãæ©ãçºçããããããã¹ãŠã®ãªã¹ããŒãé¢é£ããŒã¿ãåä¿¡ããŸãã åã€ãã³ãã®åŠçäžã«ãªãœãŒã¹ã倧éã«æ¶è²»ããæäœãå®è¡ããããšãããã«ããŒãžãããªãŒãºããå¯èœæ§ããããŸãã
const resizeDebounce = debounce(() => { // }, 200); window.addEventListener('resize', resizeDebounce);
ã€ãã³ãã®ããã£ã¿ãªã³ã°ãããªããããšã§ãé »ç¹ã«çºçããã€ãã³ãåŠç颿°ãåŒã³åºãé »åºŠãæžããããšãã§ããŸãã ãã®ã¡ã«ããºã ã®å®è£
ãšãããŸããŸãªãããžã§ã¯ãã§é¢æ°ãåŒã³åºãé »åºŠã¯ç°ãªããŸãããããšãã°ãã€ãã³ãåŠçã®é »åºŠã1ç§ããã5åã«æžãããšãããŒãžã®ããã©ãŒãã³ã¹ãå³åº§ã«åäžããããšãããããŸãã
â衚瀺ããŒãžãšãªã¢
ã¹ã¯ããŒã«ã€ãã³ãã䜿çšããäžè¬çãªæ¹æ³ã¯ãç¹å®ã®ã¢ã€ãã ãããŒãžã«è¡šç€ºãããã¿ã€ãã³ã°ãæ€åºããããšã§ãã ãããŠã³ã¹ããæé€ããææ³ã䜿çšããŠãã
getBoundingClientRect()
åŒã³åºãã«ã¯ããã©ãŠã¶ãŒãããŒãžå
šäœã®ã¬ã€ã¢ãŠããåæããå¿
èŠããããŸãã
IntersectionObserver
ãšåŒã°ããæ°ãããã©ãŠã¶ãŒAPIããããŸããããã¯ãããã«ãã£ãŠç£èŠãããèŠçŽ ã®ç¶æ
ã®å€åãå ±åãã衚瀺é åã«å
¥ããåºããã³ã«ç¹å®ã®é¢æ°ãåŒã³åºããŸãã ç¡éã¹ã¯ããŒã«ã®ããŒãžã®å Žåããã®APIã䜿çšããŠã廿¢ãããèŠèŠèŠçŽ ãåé€ãŸãã¯åå©çšã«é©ãããã®ãšããŠããŒã¯ã§ããŸãã
IntersectionObserver
APIã¯ãSafariãé€ãæè¿ã®ãã¹ãŠã®ãã©ãŠã¶ãŒã§äœ¿çšã§ããŸãã åæã«ãããŒãžè¡šç€ºé åãæäœããããã®æ°ããæ¹æ³è«ã䜿çšããããšãšãèŠçŽ ã®å¯èŠæ§ã決å®ããããã®å€ãã¢ãããŒããšã®éãã¯éåžžã«é¡èã§ãã
resourceãªãœãŒã¹ãéäžçã«äœ¿çšããæäœãå¥ã
ã®ã¹ã¬ããã«å²ãåœãŠã
倧ããªããŒã¿ã»ããã䜿çšããå ŽåããŸãã¯ç»åãªã©ã®å€§ããªãã¡ã€ã«ãåŠçããå ŽåãJavaScriptããã©ãŠã¶ãŠã£ã³ããŠããããã¯ããå ŽåããããŸãã ããã©ã«ãã§ã¯ããã¹ãŠã®ã¿ã¹ã¯ã¯åäžã®ã¹ã¬ããã§å®è¡ãããããããã®ã¹ã¬ãããéè² è·ã«ãªããšãã¢ããªã±ãŒã·ã§ã³ã€ã³ã¿ãŒãã§ã€ã¹ã¯ãŠãŒã¶ãŒã®åœ±é¿ã«å¿çããªããªããŸãã
ç¹å®ã®æäœãå®äºããã®ã«æéããããããšãããã£ãŠããå Žåã¯ãWebã¯ãŒã«ãŒã«é
眮ããããšãæ€èšãããšããã§ãããã ããã¯ãå¥ã
ã®ã¹ã¬ããã§å®è¡ãããã¹ã¯ãªããã®ååã§ãããããã®ã¹ã¯ãªããããªãœãŒã¹ã倧éã«æ¶è²»ããæäœãå®è¡ããŠããWebã¢ããªã±ãŒã·ã§ã³ã®ãŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹ã¯åŒãç¶ãæ©èœããŸãã ãã®ãããªã¹ã¯ãªããã¯ãç¹å¥ãªã¡ãã»ãŒãžã³ã°ãšã³ãžã³ã䜿çšããŠçžäºã«ããŒã¿ãéä¿¡ã§ããŸãã Webã¯ãŒã«ãŒã¯DOMããã³
window
ãªããžã§ã¯ãã®äžéšã®ããããã£ã«ã¢ã¯ã»ã¹ã§ããŸãã;ã¡ãã»ãŒãžã³ã°ã¡ã«ããºã ã¯ãã¡ã€ã³ã¹ããªãŒã ã«ããŒã¿ã転éããããã«ã䜿çšãããã€ã³ã¿ãŒãã§ã€ã¹ã«åœ±é¿ãäžããå¯èœæ§ããããŸãã
質åçªå·12ã æéã®çµéãšãšãã«é¢é£æ§ã倱ããªãJSã³ãŒããèšè¿°ããæ¹æ³
JavaScriptã®åºæ¬ååã®1ã€ã¯ãéçºäžã«ãå®è¡å¯èœã§ããã°ã以åã®ããŒãžã§ã³çšã«èšè¿°ãããã³ãŒããå®è¡ã§ããªããããªå€æŽãè¡ããªãããšã§ãã ãã®çµæãããšãã°ã仿¥éçºãããã»ãšãã©ãã¹ãŠã®ã³ãŒãã¯ãWebéçºã®äžçã®å€æ§æ§ãèæ
®ããŠãã10幎åŸã«ã¯æ©èœããŸãã
ãã ããç¹å®ã®ã³ãŒããå®è¡ããããšããããšã¯ãæéã®çµéãšãšãã«ãã®é¢é£æ§ã倱ãããªããšããæå³ã§ã¯ãããŸããã ããã§ã仿¥æžãããã®ãæ°å¹ŽåŸã«ã©ã®ããã«èŠãããã«ã€ããŠçåã«æãæãæ¥ãŸããã å°æ¥ã®ããã«ãã¹ãããæºåãã§ããŠããããã°ã©ã ãäœæã§ããããã«ããããã€ãã®ææ¡ããããŸãã
spaã¹ãã²ããã£ã³ãŒããé¿ãã
ç¹å®ã®ãããžã§ã¯ãã§ã®äœæ¥ã®åææ®µéã§ã¯ãã¢ã€ãã¢ãé
åçã«æãããããããŸãããããã°ãã³ãŒããå°ããç¬ç«ããéšåã«åå²ããããšãªãããã¹ãŠãäžç·ã«ç©ã¿éãããããšã§ãã ãã®ã¢ãããŒãã§ã¯ãç¹å®ã®ã³ãŒãã§äœãè¡ãããŠããã®ããç°¡åã«çè§£ã§ããŸãããããã¯ããã°ã©ã ã®æ©èœãäºãã«å¯æ¥ã«é¢é£ããŠããããšãæå³ããŸãã ãã®ãããããã°ã©ã ã®ã©ããã§ä»ã®éšåã«å®è£
ãããŠãããã®ãå¿
èŠãªå Žåãã³ãŒãã®å¯Ÿå¿ããã»ã¯ã·ã§ã³ãã³ããŒãããæ°ããããŒãºãèæ
®ããŠæžãæããããå¯èœæ§ããããŸãã , , , , , , -, .
, , , . , . , «», , , .
â
, React Polymer, . .
, « »? , , . , , .
, , , , , JavaScript. . , , , .
, . , , , API, , , , Node.
â
, , , . , , , , , , .
let activeUsers = users.filter(user => user.active === true);
, , , . , , , -
i
j
, .
, , . , . , ESLint, .
â
, , . . , , , .
, , , . , , , .
, , , . , , , . , , ,
users
, . , , , . , , . , - . â «» , .
â ,
Jest , ,React , . , , , , . â , , , .
. Mocha Jest , . .
, . , , , .
, , . , . â .
â
Babel, â . , « », , , , .
, , Babel â , JavaScript . , JS.
ES2015 JS , , . â , . , ES2017, , , , . Babel, , , .
, JS , , , , , .
ãŸãšã
JavaScript, - , , , , . , , , .
芪æãªãèªè
ïŒ , JS-, , , . -, ?