
çŽ2ãæåã
TheShockãš
ç§ã¯JavaScriptã®
FAQãããã¯ã§ããJavaScriptã®
質åãéããŸãã
ïŒè³ªåãããŸãã æåã®éšåãç§ãåŸã質åã¯ãæ°æ¥åŸã«
JavaScript FAQïŒããŒã1ã«çŸããŸãããã2çªç®ã®éšåã¯ããŸãããããããŸããããŸããã
TheShockã¯çŸåšãå¥ã®åœã«ç§»åããŠãããããçãã«å¿ããŠããŸããã 圌ã¯ç§ã«åœŒã®éšåã«çããããã«é Œãã ã ãããã£ãŠãçãã®2çªç®ã®éšåã¯ãç§ãåŸã質åã§ãã
ãã®ããŒãã§ã¯ïŒ
- eval = evilãªã®ã¯ãªãã§ããïŒ
- evalã眮ãæããæ¹æ³ã¯ïŒ
- ãã©ãã·ã¥ãªãã§JSã䜿çšããŠãµãŠã³ããåçããæ¹æ³ ã©ã®åœ¢åŒããµããŒããããŠããŸããïŒ
- ã°ããŒãã«å€æ°ã䜿çšãããšãã¹ã¯ãªãããã©ããããé
ããªããŸããïŒ
- JSã§ããã¹ããéžæãããªãããã«ããæ¹æ³ã¯ïŒ
- ïŒé¢æ°ïŒïŒ{}ïŒïŒïŒ; ãã®ãã¶ã€ã³ã¯äœã«äœ¿çšãããŸããïŒ
- ã€ãã³ãããªã»ããããŠã¢ã€ãã ã®ç¶æ
ã埩å
ããæ¹æ³ã¯ïŒ
- Ajaxã¢ããªã±ãŒã·ã§ã³ã§ãã©ã¡ãŒã¿ä»ãã®jsã³ãã³ããæ£ãã転éããã«ã¯ã©ãããã°ããã§ããïŒ
- ãã§ã«jQueryãã¹ãŠã£ã³ããŠãæ¢ã«ã°ããŒãã«ã§ããã®ã«ããªãæªå®çŸ©ãªã®ã§ããïŒ
- ãŠãŒã¶ãŒãããŠã¹ãã€ãŒã«ãå転ãããæ¹æ³ãèŠã€ããæ¹æ³
- èŠçŽ ãã©ãŒã«ã¹ã€ãã³ãããããŸããïŒãªãå Žåããããå®è£
ããããšã¯å¯èœã§ããïŒ
- äžå€ãªããžã§ã¯ãïŒããªãŒãºïŒã®äœãæ¹
- DomElementã®ã«ã¹ã¿ã å®è£
ãäœæããŠãã¿ã°ã®ãµãã»ãããè§£æãããšãã«äœ¿çšã§ããããã«ããããšã¯å¯èœã§ããïŒ
- ã©ã®ã¯ã©ã€ã¢ã³ãMVCãã¬ãŒã ã¯ãŒã¯ããå§ãããŸããïŒ
- ãªãã¡ã©ãŒå¶éã®ãã€ãã¹
- JavaScriptã§ã®GOTO
- JavaScriptã®ç¶æ¿ã ç·ãšå¥³ã人éããæ¡åŒµããã€ããªãã®ãŒçã«æ£ããæ¹æ³
- ã¬ã€ã¢ãŠããšãµãŒããŒãµã€ããæãäžããããšãªããJavaScriptããã°ã©ããŒãç²åŸããããšã¯å¯èœã§ããïŒ
- ãµãŒããŒãã.jsããå®è¡ãããã³ãŒãã«ããŒã¿ã転éããæ¹æ³ã¯äœã§ããïŒ
- éåžžã®DOMElemenïŒdivïŒã䜿çšããŠDOMInputElementã®åäœãååŸïŒãšãã¥ã¬ãŒãïŒã§ããŸããïŒ
- ãã©ã€ããŒãããã³ãããªãã¯ã¡ãœããã®åé¡
- JSã䜿çšããŠè€æ°ã®ãã¡ã€ã«ãåæã«éžæããŠã¢ããããŒãããæ¹æ³
- Fileããã³FormDataã䜿çšããŠãã¡ã€ã«ãããŠã³ããŒãããå ŽåããŠãŒã¶ãŒããã£ã¬ã¯ããªãããŒãããããšããŠãããã©ãããã©ã®ããã«å€æã§ããŸããïŒ
- JavaScriptã®å®£èš/泚éïŒããããPython / Javaããã®çšèªïŒã«é¡äŒŒãããã®ã¯ãããŸããïŒ
1.ãªãeval = evilãªã®ã§ããïŒ
1. Evalã¯ããã°ã©ã ã®éåžžã®ããžãã¯ã«éåããã³ãŒããçæããŸãã
2.çŸåšã®ã³ã³ããã¹ãã§ã³ãŒããå®è¡ããããã倿Žã§ããŸã-æ»æã®æœåšçãªå Žæã ã³ã³ããã¹ãã¯ã次ã®ããªãã¯ãå®è¡ããããšã§å€æŽã§ããŸãã
(1,eval)(code);
ããã§äœãèµ·ãããïŒevalã¯ãåŒã³åºãæ¹æ³ã«äŸåããåã颿°ã§ãã ãã®å Žåãã³ã³ããã¹ããã°ããŒãã«ã«å€æŽããŸãã
3. evalã«ãã£ãŠçæãããã³ãŒãã¯ãããã°ãå°é£ã§ãã
4. Evalã®å®äºã«ã¯éåžžã«é·ãæéãããããŸãã
èªãã°ããŒãã«è©äŸ¡ã ãªãã·ã§ã³ã¯äœã§ããïŒstackoverflowã«é¢ãã質åã®æïŒ
stackoverflow.com/questions/197769/when-is-javascripts-eval-not-evilstackoverflow.com/questions/646597/eval-is-evil-so-what-should-i-use-insteadstackoverflow.com/questions/86513/why-is-using-javascript-eval-function-a-bad-idea...
2. evalã眮ãæããæ¹æ³ã¯ïŒ
evalã®æè¯ã®ä»£æ¿ã¯ãevalã®äœ¿çšã䌎ããªãåªããã³ãŒãæ§é ã§ãã ãã ããevalã¯åžžã«ç°¡åã«æåŠã§ãããšã¯éããŸããïŒJSON ParsingãPattern ResizerïŒã
evalã®é©åãªä»£æ¿ã¯ãFunctionã³ã³ã¹ãã©ã¯ã¿ãŒã§ãã ããããããã¯ã°ããŒãã«ã³ã³ããã¹ãã§å®è¡ãããã®ãšåãè©äŸ¡ã§ãã
new Function('return ' + code)();
3.ãã©ãã·ã¥ãªãã§JSã䜿çšããŠãµãŠã³ããåçããæ¹æ³ ã©ã®åœ¢åŒããµããŒããããŠããŸããïŒ
æãç°¡åãªè§£æ±ºçïŒ
<audio src="http://developer.mozilla.org/@api/deki/files/2926/=AudioTest_(1).ogg" autoplay> Your browser does not support the <code>audio</code> element. </audio>
ãã ããããã¯HTML5ãªãŒãã£ãªã«éå®ãããŸããã ãã©ãŒãããïŒOgg VorbisãWAV PCMãMP3ãAACãSpeexïŒãã©ãŠã¶äŸåïŒãã©ãŒãããã«ã€ããŠïŒ
ãªãŒãã£ãªãã©ãŒãããã®ãµããŒãèªãHTML5ãªãŒãã£ãªããã³ã²ãŒã éçºïŒãã©ãŠã¶ãŒã®ãã°ãåé¡ãšè§£æ±ºçãã¢ã€ãã¢WHATWG-ãªãŒãã£ãªèŠçŽ MDN-HTMLãªãŒãã£ãªäŸïŒ
ã·ã³ãã«ãªã·ã³ã»ã®äœæäŸïŒ
ãªãŒãã£ãªãµã³ãã«ãå«ãã°ã©ãã£ãã¯ã®è¡šç€ºäŸïŒ
ãªãŒãã£ãªã¹ãã¯ãã«ã®èŠèŠåäŸïŒ
WebããŒã¹ã®ããŒã³ãžã§ãã¬ãŒã¿ãŒã®äœæ4.ã°ããŒãã«å€æ°ã䜿çšãããšãã¹ã¯ãªãããã©ãã ãé
ããªããŸããïŒ
ç¹å®ã®ãã©ãŠã¶ã«äŸåããŸãã ææ°ã®ãã©ãŠã¶ã§ã¯ããã®ç¬éã¯æé©åãããŠãããéãã¯ãããŸããã å€ããã®ã§ã¯ãã°ããŒãã«å€æ°ãžã®ã¢ã¯ã»ã¹ã¯2åé
ããªããŸãã
ãã¹ãã¯æ¬¡ã®
ãšããã§ã
ãjsperf.com /
global-vs-local-valiable-accessããã¯ãã¹ãã§ãããåæäœã¯1ç§ãããæå€§100äžåå®è¡ããããšããäºå®ãèæ
®ããŠãã ããã ãã¹ãã®å¢å ã30ïŒ
ã§ãã£ãŠããæåã®æäœã®å®éã®å¢å ã¯æ²æšã§ãïŒãã€ã¯ãç§ïŒã
5. JSã§ããã¹ãéžæãç¡å¹ã«ããæ¹æ³ã¯ïŒ
ããã€ãã®ãªãã·ã§ã³ããããŸãã
1.
onselectstart
ããã³
onmousedown
preventDefault
ãå®è¡ã
onmousedown
var element = document.getElementById('content'); element.onselectstart = function () { return false; } element.onmousedown = function () { return false; }
2.
unselectable
屿§ã远å ãã
$(document.body).attr('unselectable', 'on')
3.
user-select: none
ã¹ã¿ã€ã«ã远å ã
user-select: none
.g-unselectable { -moz-user-select: none; -khtml-user-select: none; -webkit-user-select: none; user-select: none; }
ãã®åé¡ã«ã¯ãšãã§ããªã解決çããããŸãã
4.
Range, TextRange, Selection
ãã¯ãªãŒãã³ã°ããã¿ã€ããŒ
説æããŸããã Selectionã®æäœæ¹æ³ã¯ã
RangeãTextRangeãããã³Selectionã§ç¢ºèªã§ããŸãã
5.ãã£ã³ãã¹ã«ããã¹ããã¬ã³ããªã³ã°ãã
6.ç¡å¹ãªããã¹ããšãªã¢ã䜿çšãã
<textarea disabled="disabled" style="border:none;color:#000;background:#fff; font-family:Arial;"> JS? </textarea>
以äžã¯ãã¡ãœãã1ã3ã䜿çšããjQueryã®ãã€ã¯ããã©ã°ã€ã³ã§ãã
$.fn.disableSelection = function() { function preventDefault () { return false; } $(this).attr('unselectable', 'on') .css('-moz-user-select', 'none') .css('-khtml-user-select', 'none') .css('-o-user-select', 'none') .css('-msie-user-select', 'none') .css('-webkit-user-select', 'none') .css('user-select', 'none') .mousedown(preventDefault); .each(function() { this.onselectstart = preventDefault; }); };
ãã®ãã©ã°ã€ã³ã¯ããŠãŒã¶ãŒéžæãŸãã¯éžæäžå¯ããµããŒãããŠããªããã©ãŠã¶ãŒã§ã¯ãCtrl + A Ctrl + Cããä¿åããŸããã æ³šæïŒéžæãçŠæ¢ããããšã¯æªã§ãã
6.ïŒé¢æ°ïŒïŒ{}ïŒïŒïŒ; ãã®ãã¶ã€ã³ã¯äœã«äœ¿çšãããŸããïŒ
ããã¯ãå³æèµ·å颿°åŒïŒIIFEïŒãšåŒã°ããŸããããã¯ãäœæçŽåŸã«åŒã³åºãããåŒé¢æ°ã§ãã
IIFEãäœæããããã€ãã®æ¹æ³ã次ã«ç€ºããŸã
(function(){ })();
䜿çšå ŽæïŒ
1.å€éšç°å¢ã«å
¥ããªãããã«ããã€ãã®å€æ°ãå¿
èŠãªå ŽåïŒletãªã©ïŒ
var APPLICATION_ID = function(){ var keys = { 'pew.ru': 15486, 'pew.pew.ru': 15487, 'pew.pew.pew.ru': 1548 }; return keys[window.location.host]; }();
2.ããŒã«ã«åè·¯ã®äœæ-ã¢ãžã¥ãŒã«ã®åºç€ãç¶æ
ãä¿åãããªããžã§ã¯ã
var Module = (function(){ function privateMethod () { }; return { publicMethod: function () { return privateMethod(); } }; }());
èªã峿åŒã³åºã颿°åŒïŒIIFEïŒECMA-262-3ã®è©³çްã 第5ç« æ©èœé¢æ°ãšé¢æ°ã¹ã³ãŒãååä»ã颿°åŒJavaScriptã¢ãžã¥ãŒã«ãã¿ãŒã³ïŒè©³çްJavaScriptã§èª¬æãããéé7.ã€ãã³ãããªã»ããããèŠçŽ ã®ç¶æ
ã埩å
ããæ¹æ³ã¯ïŒ
HTMLãšCSSã䜿çšããŠæåã«èšå®ããããAããã©ã¡ãŒã¿ãæã€ããçš®ã®DOMãªããžã§ã¯ãããããŸãã ãã®ããã»ã¹ã§ã¯ããã©ã¡ãŒã¿ãŒãåçã«ãBãã«å€æŽããŸãã ãªããžã§ã¯ãã®ç¶æ
ãåæç¶æ
ãAãã«ããªã»ãããããç°¡åãªæ¹æ³ã¯ãããŸããïŒ ã€ãã³ããåæ§ã§ãã åæç¶æ
ã«ããŒã«ããã¯ããæ¹æ³ã¯ïŒ
ãªããžã§ã¯ãã®ç¶æ
ã®ããŒã«ããã¯ã¯æ©èœããŸããã èŠçŽ ã¯ããŸããŸãªæ¹æ³ã§ååŸã§ãããããDOMã¯ç¶æ
ãä¿åããŸãããhtmlã³ãŒããçæãããJavaScriptããçŽæ¥ååŸã§ããŸãã
ã€ãã³ãã䜿çšãããšããã¹ãŠãç°¡åã«ãªããŸãã DOMã«ã¯åªããcloneNodeã¡ãœããããããŸãã èŠçŽ ããã®ãã¹ãŠã®ã³ã³ãã³ãã§è€è£œãïŒã€ãã³ãã¯ãããŸããïŒãå€ãèŠçŽ ãæ°ããèŠçŽ ã§çœ®ãæããŸãã
8. ajaxã¢ããªã±ãŒã·ã§ã³ã§ãã©ã¡ãŒã¿ãŒã䜿çšããŠjsã³ãã³ããæ£ãã転éããæ¹æ³
åŒçšç¬Šã§å€§éšãããã«ajaxã¢ããªã±ãŒã·ã§ã³ã§ãã©ã¡ãŒã¿ä»ãã®jsã³ãã³ããæ£ãã転éããã«ã¯ã©ãããã°ããã§ããïŒ ããã¯ãäžèšã®ajaxã·ã¹ãã ã§ã®ããŒã¿è»¢éã«é¢é£ããŠããŸãã ãã¹ããã©ã¡ãŒã¿ãŒã®ããã€ãã®ã¬ãã«ïŒããšãã°ã "setTimeoutïŒ 'alertïŒ" Boom !!! "ïŒ;'ã200ïŒ;"ïŒã§è€éãªã³ãã³ããéä¿¡ãããšãåŒçšç¬Šã䜿çšãããšåé¡ãçºçããŸãã ãããã解決ããæ¹æ³ããŸãã¯ãããã®èšèšã«é¢ããäžè¬çãªã«ãŒã«ã¯ãããŸããïŒ
ãµãŒããŒããã¯ã©ã€ã¢ã³ããžã®ã³ãŒãã®è»¢éã¯æªãã§ãã ããã¯ãevalã®åé¡ã«äŒŒãŠããŸãã æ£ãããè¿
éãã€å®å
šã«ãéä¿¡ãããã®ã¯ã³ãŒãã§ã¯ãªãããã©ãŠã¶ãŒãåŠçããããŒã¿ã§ãã
RPCã䜿çšã§ããŸãã NowJSã䜿çšãããšãéåžžã«ééçãªRPCãååŸã§ããŸãã NowJSã¯ãã¯ã©ã€ã¢ã³ãäžã§æ©èœãå®è¡ãããšãã«ãµãŒããŒäžã§æ©èœãå®è¡ã§ãããã¬ãŒã ã¯ãŒã¯ã§ãã
ããã«ãµã€ãããã®äŸããããŸãïŒ
ãµãŒããŒäžïŒNode.JSãµãŒã㌠var nowjs = require("now");
ã¯ã©ã€ã¢ã³ãã§ now.getServerInfo(function(data){
ã·ã³ãã«ã§éæãçŸããïŒ
èªãNowJSã®éå§9. jQueryãã¹ãŠã£ã³ããŠãæ¢ã«ã°ããŒãã«ã§ããã®ã«ãªãæªå®çŸ©ãªã®ã§ããïŒ
jQueryã¯ã¯ããŒãžã£ãŒãäœæãããŠã£ã³ããŠãã¹ããŒããŠæªå®çŸ©ã«ããŸãã
1.
undefined
ã¯ãã³ãŒãã®éãæžããã
undefined
ãæžãæããåé¡ãåé¿ããããã«æž¡ãããŸãã jQueryã¯ãã°ãã°
undefined
ãšæ¯èŒãããå§çž®ããããš
undefined
ã¯1æåã®å€æ°ã«å€ãããŸãã
2.ã³ãŒãã®éãæžããããã«
window
ãæž¡ãããŸãã jQueryã¯ã
window.setInterval()
ãªã©ã䜿çšããŠãç¬èªã®ãŠã£ã³ããŠã¡ãœãããåé¢ããé©åãªããªã·ãŒãé©çšããŸãã å§çž®ããããšã
window
ã¯1æåã®å€æ°ã«å€ãããã³ãŒãå
ã§ã¯
c.setInterval()
10.ãŠãŒã¶ãŒãããŠã¹ãã€ãŒã«ãã©ã®æ¹åã«åããã調ã¹ãæ¹æ³
ã¹ã¯ããŒã«ãã€ãŒã« '
DOMMouseScroll
'ïŒFirefoxïŒããã³ '
mousewheel
'ïŒæ®ãïŒã«å¿çãã2ã€ã®ã€ãã³ãããããŸãã
ã€ãã³ãããã³ã°ã¢ããããæ¹æ³ãç§ã¯èª°ããçè§£ããŠãããšæãããã®ãã³ãã©ãèŠãŠã¿ãŸããã
function wheel(event){ var delta = 0; if (!event) event = window.event;
jQueryã«ã¯ã
ããŠã¹ãã€ãŒã«ãã©ã°ã€ã³ jQueryããŠã¹ãã€ãŒã«ãã©ã°ã€ã³ãã¢ããããŸããã¹ãŠã®èŠçŽ ãã¹ã¯ããŒã«ã€ãã³ããçæã§ããããã§ã¯ãããŸããã ç¹å®ã®ãã©ãŠã¶ã«äŸåããŸãã ç¶ããèªãïŒ
ã¹ã¯ããŒã«ãšããŠã¹ãã€ãŒã«11.èŠçŽ ã«ãã©ãŒã«ã¹ã€ãã³ãããããŸããïŒãªãå Žåã¯ãå®è£
ã§ããŸããïŒ
ãã©ãŒã«ã¹ã¯è«ççãªã€ãã³ãã§ããããªããžã§ã¯ããéžæãããããšã瀺ããŸãã
æšæºãèªããšã
focus
ããã³
blur
ã€ãã³ãã¯ãã©ãŒã èŠçŽ ïŒLABELãINPUTãSELECTãTEXTAREAãããã³BUTTONïŒå°çšã§ãããšæžãããŠã
focus
ã æšæºã§ã¯ãä»ã®èŠçŽ ã¯ãã®ã€ãã³ããçæã§ããŸããã ä»ã®ãã¹ãŠã®èŠçŽ ã«ã¯ãä»ã®
DOMFocusOut
ãš
DOMFocusOut
ã IEã¯ãã€ãã®ããã«ãç¬èªã®ã€ãã³ã
focusin
ãš
focusout
ãŸãã
ãŸããFirefoxã¯æšæºã«ç¹ã«æºæ ããŠããŸããã
focus
ãš
blur
ã¹ããŒã§ãã圢åŒãé€ããããã€ãã®èŠçŽ ããããŸãã
focus, blur, focusin, focusout, DOMFocusIn, DOMFocusOut
ã¢ãŠã
focus, blur, focusin, focusout, DOMFocusIn, DOMFocusOut
ãŸãã
www.quirksmode.org/dom/events/tests/blurfocus.htmlèŠçŽ ã®3ã€ã®ã€ãã³ããã¹ãŠããªãã¹ã³ãããšãèŠçŽ ããã©ãŒã«ã¹ãåãåã£ããã©ããã倿ã§ããŸãã
èªããŒãããšãã©ãŒã«ã¹12.äžå€ãªããžã§ã¯ããäœæããæ¹æ³ïŒããªãŒãºïŒ
ECMAScript 3ïŒãã¹ãŠã®JavaScriptãšã³ãžã³ããµããŒãããæšæºïŒã§ã¯ããªããžã§ã¯ããããªãŒãºããããšã¯ã§ããŸããã§ããããECMAScript 5ã§ã¯ããªããžã§ã¯ãã®å€æŽãããã«å¶éããããã€ãã®é¢æ°ãç»å ŽããŸããã
Object.preventExtensions
ã¯æã匱ãå¶éã§ãã ãªããžã§ã¯ãã¯è¿œå ã®ãã©ã¡ãŒã¿ãŒãåãåãããšãã§ããŸãã
Object.seal
-
preventExtensions
+ãã©ã¡ãŒã¿ã¯åé€ã§ããŸãã
Object.freeze
-
preventExtensions
+
seal
+ãã©ã¡ãŒã¿ã¯èªã¿åãå°çšã«ãªããŸã
ãã¹ãŠã®ãã©ãŠã¶ããããã®æ°ããã¡ãœããããµããŒãããŠãã
ããã§ã¯ãããŸãã ã
èªãJavaScript 1.8.5ã®æ°æ©èœObject.preventExtensions / seal / freeze颿°ïŒJavaScriptïŒECMAScript 5äºææ§ããŒãã«13.ã¿ã°ã®ãµãã»ããã®è§£æã«äœ¿çšãããããã«ãDomElementã®ã«ã¹ã¿ã å®è£
ãäœæããããšã¯å¯èœã§ããïŒ
çŽæ¥ãããã DOMã¯JavaScriptãšã¯å¥ã§ãããããããã€ãã®å¶éããããŸãã
1.ç¹å®ã®èŠçŽ ã®ã³ã³ã¹ãã©ã¯ã¿ãŒã¯ãããŸãã-èŠçŽ ã®ãã¡ã¯ããªãŒã®ã¿ããããŸã
String.prototype.anchor
document.createElement('')
ããã³èŠçŽ ãäœæããããã®æååã¡ãœãã
String.prototype.anchor
ãªã©ã
HTMLElement
ãš
HTMLDivElement
ã¯ã³ã³ã¹ãã©ã¯ã¿ãŒã§ã¯ãããŸããã
2.ã³ã³ã¹ãã©ã¯ã¿ããšãã¥ã¬ãŒãããŠããDOMã¯ãªããžã§ã¯ããããªãŒã«æ¿å
¥ããåŸããªããžã§ã¯ãããã¯ãªã¢ãããŸãã
äŸ
ãã ããã¡ãœãããšããããã£ãHTMLèŠçŽ ã®ãã¯ã©ã¹ãã®ãããã¿ã€ãã«è¿œå ããŠãå°æ¥äœ¿çšããããšãã§ããŸãã
HTMLUnknownElement.prototype.pewpewpew = function () {}; console.log(typeof zzz.pewpewpew);
ãã¯ã©ã¹ãã®ç¶æ¿ãã§ãŒã³ã¯
Node -> Element -> HTMLElement -> HTMLDivElement/HTMLMetaElement ...
èŠçŽ ã®ãããã¿ã€ãã«ã¡ãœããã远å ã§ããŸãããä»ã®äººã®ãªããžã§ã¯ãã«ããããåœãŠãã®ã¯æªãããšãå¿ããªãã§ãã ããïŒ
ãã®ã¡ãœããã¯ãææ°ã®ãã©ãŠã¶ãŒã§ã®ã¿æ©èœããŸãã IE8以äžã§ã¯ãhtmlèŠçŽ ã¯ç©ºäžããåãããããããããã¿ã€ããäœã¬ãã«ã§æžãæããããšã¯ã§ããŸããã
>>document.createElement('div').constructor
>>document.createElement('div') instanceof Object
14.ã¯ã©ã€ã¢ã³ãMVCãã¬ãŒã ã¯ãŒã¯ã®ã¢ããã€ã¹ã¯äœã§ããïŒ
å€ãã®ãã¬ãŒã ã¯ãŒã¯ããããŸãã
JavaScriptMVCBackbone.jsã¹ãã©ãŠãã³ã¢ããªã ãžã£ã³ã¯ã·ã§ã³ãã¹ãŠãèŠãŠãããªããäžçªå¥œããªãã®ãéžæããŠãã ããã Backbone.jsãšã®ã¿ç·å¯ã«é£æºããŸãã
èªãBackbone.jsã䜿çšããè€éãªã€ã³ã¿ãŒãã§ã€ã¹ã®äœæãããŠåã³MVCã«ã€ããŠJavascript mvc15.ãªãã¡ã©ãŒã®ãã€ãã¹ã®å¶é
blabla.ruãµãŒããŒã«ç»åããããå¥ã®ãµãŒããŒïŒpewpew.comïŒãããªãã¡ã©ãŒãéä¿¡ããå ŽåããµãŒããŒã¯ãããæäŸããŸããã åçã®å
容ãååŸããŠãŠãŒã¶ãŒã«è¡šç€ºããæ¹æ³ã¯ïŒ
äœããã®æ¹æ³ã§ãã©ãŠã¶ããçŽæ¥ã ãªãã¡ã©ãŒã倿ŽãããµãŒããŒãããã·ãäœæã§ããŸãã
16. JavaScriptã®GOTO
å®éåé¡ã¯ãJavaScriptã§gotoåäœãç¹°ãè¿ãæ¹æ³ã§ãã ïŒè¯ãã¹ã¿ã€ã«ãšgotoã«ã€ããŠè©±ãå¿
èŠã¯ãããŸãã:)çæãããã³ãŒãã«ã€ããŠè©±ããŠããã ãããã¯ãšãµã€ã¯ã«ã®åŸ©å
ã¯ç°¡åãªããã»ã¹ã§ã¯ãããŸããïŒ
JavaScriptã«ã¯ã¿ã°ããããŸãããgotoã¯ãããŸããïŒäºçŽèªã®ã¿ããããŸãïŒã ã©ãã«ã¯ä»ã®ãã¹ãŠã®èšèªãšåãããã«èŠããŸãããåäœãç°ãªããŸãã ã©ãã«ã¯ãããã¯ãéžæããŸãã ãããã¯å
ã«ä»ã®ããŒã¯ããããããã¯ãããå ŽåããããŸãã ãã®ãããã¯å
ã«ããbreakãšcontinueã䜿çšããŠã©ãã«ã«ç§»åã§ããŸãã
äŸïŒ
loop1: for (var a = 0; a < 10; a++) { if (a == 4) { break loop1;
17. JavaScriptã®ç¶æ¿ã ç·ãšå¥³ã人éããæ¡åŒµããã€ããªãã®ãŒçã«æ£ããæ¹æ³
ãããã¿ã€ãç¶æ¿ã䜿çšããããšã¯ãã€ããªãã®ãŒçã«æ£ããã§ãã ç¶æ¿ããã»ã¹ã«ã€ããŠã¯ãèšäºã
JavaScriptã®åºæ¬ãšèª€è§£ ã
ã§è©³ãã説æãããŠã
ãŸã ã
18.ã¬ã€ã¢ãŠããšãµãŒããŒãµã€ããæãäžããããšãªããjavascriptããã°ã©ããŒãç²åŸããããšã¯å¯èœã§ããïŒ
ãããžã§ã¯ããäŒç€Ÿã®èŠæš¡ãããã³çµéšã«äŸåããŸãã
å€§äŒæ¥ã§ãã©ãŠã¶ããŒã¹ã®ã²ãŒã ã®éçºè
ã«ãªããšãJavaScriptã®ã¿ãæ±ãå¯èœæ§ãéåžžã«é«ããªããŸãã å€§äŒæ¥ã§ã¯ç¬ç«ããããã³ããšã³ãããã°ã©ãã賌å
¥ããäœè£ããããŸãããäžå°äŒæ¥ã§ã¯ã§ããŸããã å°æ»çµéšããªããŠãã©ãããŒã§ããïŒïŒ
Webã®åŠç¿ãå§ããã°ããã®å Žåã¯ããã¹ãŠã奜ããªå Žæã«è¡ãå¿
èŠããããŸãã
19.ãµãŒããŒãã.jsããå®è¡ãããã³ãŒãã«ããŒã¿ã転éããæ¹æ³ã¯äœã§ããïŒ
ããŒã¿ã転éããæ¹æ³ã¯å€æ°ãããŸãïŒXHRãSSEãWebSocketsãJSONPïŒ
ãµãŒããŒéä¿¡ã€ãã³ãã䜿çšããHTTPãµãŒããŒããã·ã¥ã®å®è£
æ°ããXMLHttpRequest2æ©èœãµãŒããŒéä¿¡ã€ãã³ãã䜿çšãããªã¢ã«ã¿ã€ã ã¢ããªã±ãŒã·ã§ã³ã®äœæAjaxã«ã€ããŠãããã
éžæãããã©ã³ã¹ããŒããšåœ¢åŒã¯ãã¢ããªã±ãŒã·ã§ã³ã®èŠä»¶ã«ãã£ãŠç°ãªããŸãã ããšãã°ãããããã£ããã®å ŽåãSSEãŸãã¯WebSocketsã®æ¹ãåªããŠããŸãïŒã¡ãã»ãŒãžã®é
ä¿¡æéãéèŠã§ãïŒã ãŸãããã®ãã£ãããIE6ã§ã¯ãã¹ãã¡ã€ã³ã§æ©èœããå ŽåãiframeãŸãã¯flashã䜿çšããŠéæ³ã远å ããå¿
èŠããããŸãã
20.éåžžã®DOMElemenïŒdivïŒã䜿çšããŠDOMInputElementã®åäœãååŸïŒãšãã¥ã¬ãŒãïŒããããšã¯å¯èœã§ããïŒ
äœã¬ãã«ã§ã¯ã§ããŸããã ãã®çç±ã13çªç®ã®äŸã§èª¬æããŸããã DOMDivElementã«åºã¥ãå
¥åããšãã¥ã¬ãŒãããã©ãããŒãäœæã§ããŸãã
ç°¡åãªãšãã¥ã¬ãŒã¿ãŒ
jsfiddle.net/azproduction/Kz4d9ãã¹ã±ããããŸãã-éåžžã«æªãå
¥åã§ããããšã倿ããŸããïŒéä¿¡æ¹æ³ãããããªãããã©ãŒã«ã¹ãå€±ãæ¹æ³ãããããªããªã©ïŒã
åãåé¡ã¯ã1ã€ã®å±æ§ã®ã¿ã远å ããããšã§ããããšã¬ã¬ã³ãã«è§£æ±ºã§ããŸãïŒ
Finomã«æãåºãããŠãããŸã ïŒcontenteditableã
ãã¹ã¯ããããã©ãŠã¶ãŒã®ã¿ããµããŒãããŸã-åãå
¥åã倿ããŸããããã¯ããã«ã·ã³ãã«ã§åªãã
jsfiddle.net/azproduction/ZTqRe21.ãã©ã€ããŒãã¡ãœãããšãããªãã¯ã¡ãœããã®åé¡
ãªããžã§ã¯ãã®ãã©ã€ããŒã倿°ãšã¡ãœããã䜿çšãããå Žåã¯ãJavaScriptã§ãããªãã¯ãããã©ã€ããŒãã¡ãœããã«ã¢ã¯ã»ã¹ããåé¡ããããŸãã ãããŠãã³ã³ã¹ãã©ã¯ã¿å
ã§å®çŸ©ãããç¹æš©ã¡ãœããã¯ãæ£ããçè§£ããã°ãã€ã³ã¹ã¿ã³ã¹ããšã«è€è£œãããŸããããã¯ããã©ãŒãã³ã¹ã®ç¹ã§ã¯ããŸãè¯ããããŸããã ãã®ã¢ãããŒãã¯ã©ãã§ããïŒ
TheShock ïŒ
ããã¢ãããŒãã å°ãªããšãã³ã³ã¹ãã©ã¯ã¿ãŒã§ãã¹ãŠã®ã¡ãœããã宣èšããããã¯ãŸãã§ãã
ã¢ãžã¥ã©ãŒã¢ãããŒãïŒ
var Module = (function (window) { function privateFunction() { console.log('pass'); }; var privateClass = function () {}; var publicClass = function () {}; publicClass.prototype.publicMethod = function () { privateFunction();
22. JSã䜿çšããŠè€æ°ã®ãã¡ã€ã«ãåæã«éžæããŠã¢ããããŒãããæ¹æ³
ãã¹ãŠãäžåºŠã§ã¯ãªãé·ãéæžãããŠããŸãïŒ
1.
HTML5 File APIïŒãµãŒããŒãžã®è€æ°ã®ãã¡ã€ã«ã®ã¢ããããŒã2.
HTML5ã䜿çšããŠãã¡ã€ã«ãã¢ããããŒãããæªå£ãèšã£ãåæ°3.
è€æ°ã®ãã¡ã€ã«ãèªã¿èŸŒããã©ãŠã¶ãŒ4.
ajaxãphpãã©ãŒã ã§è€æ°ã®ãã¡ã€ã«ãã¢ããããŒããã5.
html5 File APIã䜿çšããŠã奜ã¿ãšãã³ãµãŒãå«ããã¡ã€ã«ãããŠã³ããŒããã23. Fileããã³FormDataã䜿çšããŠãã¡ã€ã«ãããŠã³ããŒãããå ŽåããŠãŒã¶ãŒããã£ã¬ã¯ããªãããŒãããããšããŠãããã©ããã確èªããã«ã¯ã©ãããã°ããã§ããïŒ
Fileããã³FormDataã䜿çšããŠãã¡ã€ã«ãããŠã³ããŒãããå Žå-ãŠãŒã¶ãŒããã£ã¬ã¯ããªãããŒãããããšããŠãããã©ããã倿ããæ¹æ³ã File.typeããããã£ã¯æ®å¿µãªãã圹ã«ç«ããªãïŒããã€ãã®ã¿ã€ãã§ã¯ãdir-ç©ºã®æååãªã©ïŒãsizeããããã£ãïŒffãšsafariã¯ç°ãªã£ãŠè¡šç€ºãããïŒ
File.type
ã«é¢ããŠã¯ãããã¯MIMEã¿ã€ãã§ãããšèšãããå®çŸ©ãããŠããªãå Žåã¯ç©ºã®æååã«ãªããŸãã MIMEã¿ã€ãã¯ãéåžžã©ããããã¡ã€ã«/ãã©ã«ããŒã®æ¡åŒµåããååŸãããŸãã ãpewpewããšããååã®å®éã®ãã¡ã€ã«ãã¹ãªãããããšãmimeã¯ããã«ãªãããã£ã¬ã¯ããªã®ååããpewpew.htmlãã«ãªããšãmimeã¯
"text/html"
ãŸãã ããã¯ç§ãã¡ã«ã¯åããŸããã
ãã©ã«ããŒã®ãµã€ãºã¯åžžã«0ã§ããããµã€ãºã0ãã€ãã®ãã¡ã€ã«ãååšããå ŽåããããŸãã 100ïŒ
ã®ä¿¡é ŒãåŸãããã«ãããã¯ç§ãã¡ã«ã¯é©ããŠããŸããã
æšæºã®
www.w3.org/TR/FileAPIã¯ãã£ã¬ã¯ããªã«ã€ããŠåå¥ã«è©±ããŸãããããŠãŒã¶ãŒãäžæ£ãªãã¡ã€ã«ïŒä¿è·ãããŠãããèªã¿åãäžå¯ãªã©ïŒãæäœããããšãããšããã©ãŠã¶ãŒã¯
SECURITY_ERR
ãã¹ããŒã§ãããšè¿°ã¹ãŠããŸããããã
ç§ãåã£ãåºç€ã¯ã
ãã©ãã°ã¢ã³ãããããã®äŸã§ã
FileReader
ã䜿çšããŠããªãœãŒã¹ã®ã¿ã€ããæ±ºå®ããŸãã firefoxã§ã¯ããã©ã«ããŒããã¡ã€ã«ãšããŠèªã¿åããšã
reader.readAsDataURL
ã¡ãœããã¯äŸå€ãã¹ããŒããŸãã ã¯ãã ã§ã¯ããã®äŸå€ã¯ã¹ããŒãããŸãããã
reader
onerror
ã€ãã³ãã
onerror
ãŸãã ã¯ãã¹ããŠããã¡ã€ã«ãã©ããã倿ãã颿°ãååŸããŸãã
function isReadableFile(file, callback) { var reader = new FileReader(); reader.onload = function () { callback && callback(true); callback = null; } reader.onerror = function () { callback && callback(false); callback = null; } try { reader.readAsDataURL(file); } catch (e) { callback && callback(false); callback = null; } }
颿°ã§ã¯ãã»ãã¥ãªãã£ã®ããã«ãã³ãŒã«ããã¯ãåé€ããŠãå床åŒã³åºãããªãããã«ããŸãïŒå°æ¥ã
FileReader
ã®åäœã倿Žãããå¯èœæ§ããããŸãïŒã
Jsfiddle.net/azproduction/3sV23/8ã®äŸãã¶ãããã¯ãã¡ã€ã«ãµã€ãºã«ãã£ãŠå¶éãããŠããŸããã 0ã®å Žåãããã¯ãã¡ã€ã«ã§ã¯ãªããšèããŸãïŒãµã€ãºã0ãã€ãã®ãã¡ã€ã«ãã¢ããããŒãããã®ã¯å¥åŠã ããã§ãïŒã
24. JavaScriptã®å®£èš/泚éïŒããããPython / Javaããã®çšèªïŒã«é¡äŒŒãããã®ã¯ãããŸããïŒ
çŽæ¥ã®ã¢ããã°ã¯ãããŸããã
PS質åãžã®åçãå¿ããå Žåã¯ãããäžåºŠè³ªåããŠãã ããã æåãŸãã¯2çªç®ã®éšåã®ãããã«ãåçããªã質åãããå Žå-質å-3çªç®ã«ãããŸã;ïŒ