
仿¥ã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ã³ãŒããèšè¿°ããéã®å€ãã®äžè¬çãªééããé¿ããã®ã«ã圹ç«ã¡ãŸãã