
ä»æ¥ãJavaScriptã¯ã»ãšãã©ã®ææ°ã®Webã¢ããªã±ãŒã·ã§ã³ã®äžæ žã§ãã åæã«ãè¿å¹Žã§ã¯ã
ã·ã³ã°ã«ããŒãžã¢ããªã±ãŒã·ã§ã³ïŒSPAïŒ ãã°ã©ãã£ãã¯ã¹ãã¢ãã¡ãŒã·ã§ã³ãããã«ã¯ãµãŒããŒãã©ãããã©ãŒã ã®éçºè
åãã®JavaScriptã©ã€ãã©ãªãšãã¬ãŒã ã¯ãŒã¯ãå€æ°ç»å ŽããŠããŸãã JavaScriptã¯Webéçºã«åºã䜿çšãããŠããããã®çµæãã³ãŒãã®å質ããŸããŸãéèŠã«ãªã£ãŠããŸãã
äžèŠãããšããã®èšèªã¯éåžžã«åçŽã«èŠãããããããŸããã åºæ¬çãªJavaScriptæ©èœãWebããŒãžã«åã蟌ãããšã¯ãçµéšã®ããéçºè
ã«ãšã£ãŠã¯åé¡ã§ã¯ãããŸãããããšã以åã«ãã®èšèªã«åºäŒã£ãããšããªããŠãã§ãã ãã ããJavaScriptã¯æåãããã¯ããã«è€éã§åŒ·åã§ããã¥ã¢ã³ã¹ã«ææã§ãããããããã¯èª€è§£ãæãå°è±¡ã§ãã ãã®èšèªã®åŸ®åŠãªç¹ã®å€ãã¯ãå€ãã®äžè¬çãªééãã«ã€ãªãããŸãã ä»æ¥ã¯ãããã®ããã€ããèŠãŸãã JavaScriptã§å®å
šã«ããã°ã©ã ãããå Žåã¯ããããã®ãšã©ãŒã«ç¹å¥ãªæ³šæãæãå¿
èŠããããŸãã
1.ãããžã®èª€ã£ããªã³ã¯
è¿å¹ŽãJavaScriptããã°ã©ãã³ã°ãéåžžã«è€éã«ãªã£ãããããã®ããŒã¯ãŒããšæ··åãããããšãå€ãã³ãŒã«ããã¯é¢æ°ãšã¯ããŒãžã£ãŒãåºçŸããã±ãŒã¹ãããã«å¿ããŠå¢å ããŠããŸãã
ããšãã°ã次ã®ã³ãŒããå®è¡ãããšïŒ
Game.prototype.restart = function () { this.clearLocalStorage(); this.timer = setTimeout(function() { this.clearBoard();
ãšã©ãŒã«ã€ãªãããŸãïŒ
Uncaught TypeError: undefined is not a function
ãªããããèµ·ãã£ãŠããã®ã§ããïŒ ã³ã³ããã¹ãããã¹ãŠã§ãã
setTimeout()
ãåŒã³åºããšããå®éã«ã¯
window.setTimeout()
åŒã³åºããŸãã ãã®çµæã
setTimeout()
æž¡ãããå¿åé¢æ°ã¯ã
clearBoard()
ã¡ãœãããæããªã
window
ãªããžã§ã¯ãã®ã³ã³ããã¹ãã§å®çŸ©ãããŸãã
å€ããã©ãŠã¶ãšäºææ§ã®ããåŸæ¥ã®ãœãªã¥ãŒã·ã§ã³ã§ã¯ãã¯ããŒãžã£ãŒã«æ ŒçŽã§ããå€æ°ã«
this
ãžã®åç
§ãæ ŒçŽããã ãã§ãã
Game.prototype.restart = function () { this.clearLocalStorage(); var self = this;
æ°ãããã©ãŠã¶ã®å Žåã
bind()
ã¡ãœããã䜿çšããŠãé¢æ°ãå®è¡ã³ã³ããã¹ãã«é¢é£ä»ããããšãã§ããŸãã
Game.prototype.restart = function () { this.clearLocalStorage(); this.timer = setTimeout(this.reset.bind(this), 0);
2.ãããã¯ã¬ãã«ã®å¯èŠæ§
éçºè
ã¯ãJavaScriptãã³ãŒãã®ãããã¯ããšã«æ°ããã¹ã³ãŒããäœæãããšèããŠããŸãã ããã¯ä»ã®å€ãã®èšèªã«ãåœãŠã¯ãŸããŸãããJavaScriptã§ã¯çºçããŸããã ãã®ã³ãŒããèŠãŠãã ããïŒ
for (var i = 0; i < 10; i++) { } console.log(i);
console.log()
ãåŒã³åºããšã
undefined
åºåãŸãã¯ãšã©ãŒãçºçãããšæãããå Žåã¯ãééã£ãŠããŸãïŒã10ãã衚瀺ãããŸãã ãªãã§ïŒ ä»ã®ã»ãšãã©ã®èšèªã§ã¯ãå€æ°
i
ã¹ã³ãŒãã
for
ãããã¯ã«å¶éãããããããã®ã³ãŒãã¯ãšã©ãŒãåŒãèµ·ãããŸãã ãã ããJavaScriptã§ã¯ããã®å€æ°ã¯
for
ã«ãŒãã®å®äºåŸãã¹ã³ãŒãå
ã«æ®ãããã®æåŸã®å€ãä¿æããŸãïŒãã®åäœã¯ã
var hoisting ããšããŠç¥ãããŠããŸãïŒã ããŒãžã§ã³1.7以éã
let
èšè¿°åã䜿çšããŠJavaScriptã«ãããã¯ã¬ãã«ã®ã¹ã³ãŒããå°å
¥ãããŠããããšã«æ³šæããŠãã ããã
3.ã¡ã¢ãªãªãŒã¯
åäœäžã«æèçã«ããããåé¿ããªãå Žåãã¡ã¢ãªãªãŒã¯ã¯ã»ãšãã©é¿ããããŸããã ãªãŒã¯ã«ã¯å€ãã®çç±ããããŸãããæãé »ç¹ãªãã®ã«ã®ã¿çŠç¹ãåœãŠãŸãã
ååšããªããªããžã§ã¯ããžã®ãªã³ã¯ ã ãã®ã³ãŒããåæããŸãããïŒ
var theThing = null; var replaceThing = function () { var priorThing = theThing; var unused = function () {
ãã®ã³ãŒããå®è¡ãããšã1ç§ãããçŽã¡ã¬ãã€ãã®é床ã§å€§èŠæš¡ãªã¡ã¢ãªãªãŒã¯ãæ€åºã§ããŸãã
longStr
ãåŒã³åºããã³ã«
longStr
å²ãåœãŠãããã¡ã¢ãªã倱ãããã§ãã ãã®çç±ã¯äœã§ããïŒ
å
theThing
ãªããžã§ã¯ãã«ã¯ãç¬èªã®
theThing
ãªããžã§ã¯ããå«ãŸããŠããŸãã
replaceThing
åŒã³åºããããšãé¢æ°
replaceThing
1ç§ããšã«ã
theThing
å€æ°ã«ä»¥åã®
theThing
ãªããžã§ã¯ããžã®åç
§ãæ ŒçŽããŸãã ããã¯åé¡ã§ã¯ãããŸãããåã®
priorThing
ãªã³ã¯ãæ¯å
priorThing = theThing;
ããã
priorThing = theThing;
ïŒ
priorThing = theThing;
ïŒã ãªãŒã¯ã®çç±ã¯äœã§ããïŒ
ã¯ããŒãžã£ãŒãå®è£
ããäžè¬çãªæ¹æ³ã¯ãåé¢æ°ãªããžã§ã¯ããšèŸæžãªããžã§ã¯ãã®éã®é¢ä¿ãäœæããããšã§ããããã¯ããã®é¢æ°ã®åå¥ã¹ã³ãŒãã§ãã
someMethod
å
ã§å®çŸ©ãããäž¡æ¹ã®é¢æ°ïŒ
unused
ããã³
someMethod
ïŒãå®éã«
replaceThing
䜿çšããå Žåã
priorThing
ã
priorThing
æžãæããããŠããäž¡æ¹ã®é¢æ°ãåãã¬ãã·ã«ã«ã¹ã³ãŒãã䜿çšãããããåããªããžã§ã¯ããååŸããããšãç解ããããšãéèŠ
priorThing
ã ãããŠãããããã®ã¯ããŒãžã£ãŒã§å€æ°ã䜿çšããããšããã«ããã®ã¹ã³ãŒãã®ãã¹ãŠã®ã¯ããŒãžã£ãŒã§äœ¿çšãããåå¥ã¹ã³ãŒãã«åé¡ãããŸãã ãããŠããã®å°ããªãã¥ã¢ã³ã¹ã¯åŒ·åãªã¡ã¢ãªãªãŒã¯ã«ã€ãªãããŸãã
埪ç°ãªã³ã¯ ã ã³ãŒãäŸãèããŠã¿ãŸãããïŒ
function addClickHandler(element) { element.click = function onClick(e) { alert("Clicked the " + element.nodeName) } }
ããã§ã
onClick
ã¯ã
element
ãžã®ãªã³ã¯
element
ä¿åãããã¯ããŒãžã£ãŒããããŸãã
onClick
ã
element
click
ã€ãã³ããã³ãã©ãšããŠå²ãåœãŠãããšã«ããã埪ç°ãªã³ã¯ãäœæããŸããïŒ
onClick
>
onClick
>
onClick
>
onClick
>
element
...
DOMãã
element
ãåé€ããŠãã埪ç°ãªã³ã¯ã«ãã£ãŠã¬ããŒãžã³ã¬ã¯ã¿ãŒãã
element
ãš
onClick
ãé衚瀺ã«ãªããã¡ã¢ãªãªãŒã¯ãçºçããŸãã ãªãŒã¯ãåé¿ããæè¯ã®æ¹æ³ã¯äœã§ããïŒ JavaScriptã¡ã¢ãªç®¡çïŒç¹ã«ã¬ããŒãžã³ã¬ã¯ã·ã§ã³ïŒã¯ãäž»ã«ãªããžã§ã¯ãã®å°éå¯èœæ§ã®æŠå¿µã«åºã¥ããŠããŸãã 次ã®ãªããžã§ã¯ãã¯å°éå¯èœãšèŠãªãããã«ãŒããšåŒã°ããŸãã
- åŒã³åºãã¹ã¿ãã¯ã«å«ãŸããåç
§ïŒçŸåšåŒã³åºãããŠãããã¹ãŠã®ããŒã«ã«å€æ°ãšé¢æ°ãã©ã¡ãŒã¿ãŒãããã³ã¯ããŒãžã£ãŒã®ã¹ã³ãŒãå
ã®ãã¹ãŠã®å€æ°ïŒ;
- ãã¹ãŠã®ã°ããŒãã«å€æ°ã
ãªããžã§ã¯ãã¯ããªã³ã¯ãŸãã¯ãªã³ã¯ãã§ãŒã³ã«ãã£ãŠã«ãŒãããã¢ã¯ã»ã¹ã§ããå Žåã«ã®ã¿ã¡ã¢ãªã«æ ŒçŽãããŸãã
ãã©ãŠã¶ã«ã¯ãå°éäžèœãªããžã§ã¯ãããã¡ã¢ãªãæ¶å»ããçµã¿èŸŒã¿ã®ã¬ããŒãžã³ã¬ã¯ã¿ããããŸãã ã€ãŸãããªããžã§ã¯ãã¯ãã¬ããŒãžã³ã¬ã¯ã¿ãŒãå°éäžèœã§ãããšå€æãã
å Žåã«ã®ã¿ã¡ã¢ãªããåé€ãããŸãã æ®å¿µãªããããå°éå¯èœããšèŠãªãããæªäœ¿çšã®å€§ããªãªããžã§ã¯ãã¯éåžžã«ç°¡åã«èç©ãããå¯èœæ§ããããŸãã
4.å¹³çã®èª€è§£
JavaScriptã®å©ç¹ã®1ã€ã¯ãããŒã«å€ã®ã³ã³ããã¹ãã§äœ¿çšãããå Žåãå€ãããŒã«å€ã«èªåçã«å€æããããšã§ãã ãã ãããã®å©äŸ¿æ§ã誀解ãæãå ŽåããããŸãã
æåŸã®2è¡ãæå®ãããšã空ã®å Žåã§ã
{}
ãš
[]
ã¯å®éã«ã¯ãªããžã§ã¯ãã§ãã JavaScriptã®ãªããžã§ã¯ãã¯ããŒã«å€
true
察å¿ã
true
ã ãã ããå€ãã®éçºè
ã¯å€ã
false
ãªããšä¿¡ããŠããŸãã
äžèšã®2ã€ã®äŸã瀺ãããã«ãèªååå€æãå¹²æžããããšããããŸãã äžè¬çã«ãåå€æã®å¯äœçšãé¿ããããã«ã
==
ãš
!=
代ããã«
===
ãš
!==
ã䜿çšããããšãã
===
ã
!==
ã
ã¡ãªã¿ã«ã
NaN
ãäœããšæ¯èŒãããšïŒ
NaN
ã§ãïŒïŒåžžã«
false
ãçæãã
false
ã ãããã£ãŠãçå€æŒç®åïŒ
==
ã
===
!=
!==
ïŒã䜿çšããŠã
NaN
å€ã®å¯Ÿå¿ãå€æããããšã¯ã§ããŸããã 代ããã«ãçµã¿èŸŒã¿ã®ã°ããŒãã«é¢æ°
isNaN()
䜿çšã
isNaN()
ã
console.log(NaN == NaN);
5. DOMã®èª€çš
JavaScriptã§ã¯ãDOMãç°¡åã«æäœïŒèŠçŽ ã®è¿œå ãå€æŽãåé€ãå«ãïŒã§ããŸãããå€ãã®å Žåãéçºè
ã¯ãããéå¹ççã«è¡ããŸãã ããšãã°ãäžé£ã®ã¢ã€ãã ãäžåºŠã«1ã€ãã€è¿œå ããŸãã ãã ããèŠçŽ ãè¿œå ããæäœã¯éåžžã«é«äŸ¡ã§ããããã®é 次å®è£
ã¯é¿ããå¿
èŠããããŸãã
è€æ°ã®èŠçŽ ãè¿œå ããå¿
èŠãããå Žåã¯ã代ããã«ããã¥ã¡ã³ããã©ã°ã¡ã³ãã䜿çšã§ããŸãã
var div = document.getElementsByTagName("my_div"); var fragment = document.createDocumentFragment(); for (var e = 0; e < elems.length; e++) { fragment.appendChild(elems[e]); } div.appendChild(fragment.cloneNode(true));
ãŸããæåã«èŠçŽ ãäœæããã³å€æŽããŠããDOMã«è¿œå ããããšããå§ãããŸããããã«ãããããã©ãŒãã³ã¹ã倧å¹
ã«åäžããŸãã
6. forã«ãŒãå
ã§ã®é¢æ°å®çŸ©ã®èª€ã£ã䜿çš
ã³ãŒãäŸãèããŠã¿ãŸãããïŒ
var elements = document.getElementsByTagName('input'); var n = elements.length;
10åã®èŠçŽ ã®ãããããã¯ãªãã¯ãããšããããã¯èŠçŽ ïŒ10ã§ãããšããã¡ãã»ãŒãžã衚瀺ãããŸãã ãã®çç±ã¯ã
onclick
ãããããã®èŠçŽ ã«ãã£ãŠåŒã³åºããããŸã§ã«ãäžæµã®
for
ã«ãŒããå®äºãã
i
ã®å€ã10ã«ãªãããã§ãã
æ£ããã³ãŒãã®äŸïŒ
var elements = document.getElementsByTagName('input'); var n = elements.length;
makeHandler
ã¯ã«ãŒãã®åå埩ã§çŽã¡ã«éå§ããçŸåšã®å€
i+1
ãååŸããŠå€æ°
num
ä¿åããŸãã å€éšé¢æ°ã¯ãå
éšé¢æ°ïŒ
num
å€æ°ã䜿çšïŒãè¿ãã
onclick
ãã³ãã©ãŒãšããŠèšå®ããŸãã ããã«ããããã¹ãŠã®
onclick
ãæ£ãã
i
å€ãåãåãã䜿çšããããã«ãªããŸãã
7.ãããã¿ã€ãã«ããäžé©åãªç¶æ¿
é©ãã¹ãããšã«ãå€ãã®éçºè
ã¯ãããã¿ã€ãã«ããç¶æ¿ã®ã¡ã«ããºã ãæ確ã«ç解ããŠããŸããã ã³ãŒãäŸãèããŠã¿ãŸãããïŒ
BaseObject = function(name) { if(typeof name !== "undefined") { this.name = name; } else { this.name = 'default' } }; var firstObj = new BaseObject(); var secondObj = new BaseObject('unique'); console.log(firstObj.name);
ãããã次ã®ããã«æžããå ŽåïŒ
delete secondObj.name;
ããªãã¯åŸãã§ãããïŒ
console.log(secondObj.name);
ããããå€ã
default
ã«æ»ãããšã¯è¯ããããŸãããïŒ ããã¯ããããã¿ã€ããä»ããŠç¶æ¿ãé©çšââããå Žåãç°¡åã«å®è¡ã§ããŸãã
BaseObject = function (name) { if(typeof name !== "undefined") { this.name = name; } }; BaseObject.prototype.name = 'default';
å
BaseObject
ã€ã³ã¹ã¿ã³ã¹ã¯ããã®ãããã¿ã€ãã®nameããããã£ãç¶æ¿ãã
default
å€ãå²ãåœãŠãããŸãã ãããã£ãŠãã³ã³ã¹ãã©ã¯ã¿ã
name
ãªãã§åŒã³åºãããå Žåã
name
ããããã£ã¯
default
ãªã
default
ã åæ§ã«ã
name
ããããã£ã
BaseObject
ã€ã³ã¹ã¿ã³ã¹ããåé€ãããå Žåããããã¿ã€ããã§ãŒã³ãæ€çŽ¢ããã
prototype
ãªããžã§ã¯ããã
name
ããããã£ãååŸãããŸããããã®ããããã£ã¯
default
ãŸãŸ
default
ïŒ
var thirdObj = new BaseObject('unique'); console.log(thirdObj.name);
8.ã€ã³ã¹ã¿ã³ã¹ã¡ãœãããžã®èª€ã£ãåç
§ã®äœæ
åçŽãªã³ã³ã¹ãã©ã¯ã¿ãŒãå®çŸ©ããããã䜿çšããŠãªããžã§ã¯ããäœæããŸãã
var MyObject = function() {} MyObject.prototype.whoAmI = function() { console.log(this === window ? "window" : "MyObj"); }; var obj = new MyObject();
䟿å®äžã
whoAmI
ã¡ãœãããžã®ãªã³ã¯ãäœæããŸãã
var whoAmI = obj.whoAmI;
æ°ãã
whoAmI
å€æ°ã®å€ã
whoAmI
ãŸãã
console.log(whoAmI);
ã³ã³ãœãŒã«ã«ã¯ä»¥äžã衚瀺ãããŸãã
function () { console.log(this === window ? "window" : "MyObj"); }
obj.whoAmI()
ãš
whoAmI()
åŒã³åºããšãã®éãã«æ³šç®ããŠãã ããã
obj.whoAmI();
äœãæªãã£ãã®ã§ããïŒ
var whoAmI = obj.whoAmI;
ãå²ãåœãŠããšã ãæ°ããå€æ°ãã°ããŒãã«åå空éã«å®çŸ©ãããŸããã ãã®çµæã
this
ã¯
MyObject
ã€ã³ã¹ã¿ã³ã¹ã«å¯ŸããŠ
obj
ã§ã¯ãªã
window
ã§ããããšãå€æããŸããã ãããã£ãŠããªããžã§ã¯ãã®æ¢åã®ã¡ãœãããžã®åç
§ãæ¬åœã«äœæããå¿
èŠãããå Žåããã®ãªããžã§ã¯ãã®åå空éå
ã§ãããè¡ãå¿
èŠããããŸãã äŸïŒ
var MyObject = function() {} MyObject.prototype.whoAmI = function() { console.log(this === window ? "window" : "MyObj"); }; var obj = new MyObject(); obj.w = obj.whoAmI;
9. setTimeoutãŸãã¯setIntervalã®æåã®åŒæ°ãšããŠæååã䜿çšãã
ããèªäœã¯ééãã§ã¯ãããŸããã ãããŠãããã©ãŒãã³ã¹ã ãã§ã¯ãããŸããã åé¡ã¯ãæååå€æ°ã
setTimeout
ãŸãã¯
setInterval
æåã®åŒæ°ãšããŠæž¡ããšãããã
Function
ã³ã³ã¹ãã©ã¯ã¿ãŒã«æž¡ãããŠæ°ããé¢æ°ã«å€æãããããšã§ãã ãã®ããã»ã¹ã¯é
ããéå¹ççã§ãã å¥ã®æ¹æ³ã¯ãæåã®åŒæ°ãšããŠé¢æ°ã䜿çšããããšã§ãïŒ
setInterval(logTime, 1000);
10.ãå³æ Œã¢ãŒããã®äœ¿çšã®æåŠ
ããã¯ãå®è¡å¯èœã³ãŒãã«å€æ°ã®å¶éã課ãããã¢ãŒãã§ããããã«ãããã»ãã¥ãªãã£ãåäžãããšã©ãŒã®çºçãé²ãããšãã§ããŸãã ãã¡ããããå³æ Œã¢ãŒããã®äœ¿çšãæåŠããããšèªäœã¯ééãã§ã¯ãããŸããã ãã®å Žåã次ã®ãããªå€ãã®å©ç¹ããããŸããã
- ãããã°ããã»ã¹ã®ä¿é² ã ç¡èŠããããæ°ä»ãããªãã³ãŒãã®ãšã©ãŒã¯ãèŠåã«ã€ãªãããäŸå€ãã¹ããŒããŠãããã«åé¡ã®åå ã«ã€ãªãããŸãã
- ã°ããŒãã«å€æ°ã®å¶çºçãªçºçã®é²æ¢ ã 宣èšãããŠããªãå€æ°ã«å€ãå²ãåœãŠããšããã®ååã®ã°ããŒãã«å€æ°ãèªåçã«äœæãããŸãã ããã¯æãäžè¬çãªJavaScriptãšã©ãŒã®1ã€ã§ãã ãå³æ Œãªã¢ãŒããã§ã¯ãããã¯ãšã©ãŒã¡ãã»ãŒãžã«ãªããŸãã
- ããããã£åãŸãã¯ãã©ã¡ãŒã¿å€ã®éè€ãé²ããŸã ã ããããã£åã®éè€ïŒããšãã°ã
var object = {foo: "bar", foo: "baz"};
ïŒãŸãã¯é¢æ°ãžã®åŒæ°ã®ååã "strict mode"ãæå¹ã«ãªã£ãŠãããšãã«æ€åºããããšããšã©ãŒã¡ãã»ãŒãžã衚瀺ãããŸãã ããã«ããããã°ããã°ããæ€åºããŠä¿®æ£ã§ããŸãã eval()
æœåšçãªå±éºãæžãã ã strictã¢ãŒãã§ã¯ã eval()
å
ã§å®£èšãããå€æ°ãšé¢æ°ã¯çŸåšã®ã¹ã³ãŒãã§äœæãããŸããã- 誀ã£ãŠ
delete
æŒç®åã䜿çšãããšãã«ãšã©ãŒã¡ãã»ãŒãžãåä¿¡ãã ã ãã®æŒç®åã¯ã configurable
ãã©ã°ãfalse
ã§ãããªããžã§ã¯ãã®ããããã£ã«ã¯é©çšã§ããŸããããããå®è¡ããããšãããšããšã©ãŒã¡ãã»ãŒãžã衚瀺ãããŸãã
çµè«ãšããŠ
JavaScriptãã©ã®ããã«ããªãæ©èœããããããç解ããã°ããã»ã©ãã³ãŒãã®ä¿¡é Œæ§ãé«ããªãããã®èšèªã®æ©èœãããå¹æçã«äœ¿çšã§ããããã«ãªããŸãã éã«ãJavaScriptã«åã蟌ãŸãããã©ãã€ã ã®èª€è§£ã¯ããœãããŠã§ã¢è£œåã«å€æ°ã®ãã°ãåŒãèµ·ãããŠããŸãã
ãããã£ãŠãèšèªã®ãã¥ã¢ã³ã¹ãšç¹çŽ°ãã®ç 究ã¯ãããæèãšçç£æ§ãé«ããããã®æãå¹æçãªæŠç¥ã§ãããJavaScriptã³ãŒããèšè¿°ããéã®å€ãã®äžè¬çãªééããé¿ããã®ã«ã圹ç«ã¡ãŸãã