
JavaScriptå質ã¬ã€ã
ãã®ã¬ã€ãã§ææ¡ãããŠãããã³ãã䜿çšããŠãéçºããŒã ãç解ã§ããã³ãŒããäœæããŸãã
翻蚳è ãã
ããã«ã¡ã¯ãããã·ã ã»ã€ã¯ãããä»æ¥ã¯JavaScriptã³ãŒããäœæããããã®ã«ãŒã«ã«ã€ããŠã話ããŸã ã ã¢ã«ãŒã³ãã³ã®éçºè ã§ããJavaScript Application Designã®èè ã§ããNicolásBevacquaã¯ããã®ã¬ã€ãããã£ãšåã«å ¬éããŸãããæåã®ã¬ã³ãŒãã¯2014幎ã«ç»å ŽããŸããããä»æ¥ã§ã¯ES5èŠæ Œã«åŸã£ãŠå€ãã®èšè¿°ããããŸããããã¯ãES6ããŸã ããã«ãä»ã®ãã©ã³ã¹ãã€ã©ãŒãªãã§å®å šã«åäœããŠããå Žæã§ã¯ãªãã®ã§ãäŸç¶ãšããŠé¢é£ããŠããŸãã èšç»ã®70ã90ïŒ ããã§ã«å®è£ ãããŠããããããšã³ãã®ãã¹ã¯ããããã©ãŠã¶ãŒïŒGoogle CrhomeãFirefoxïŒã§é²æ©ãèŠãããŸãããæ°ããæšæºã®ãµããŒãã«åªããŠããŸãããæ®å¿µãªããES6ãå®å šã«ãµããŒãã§ãããã©ãŠã¶ãŒã¯ãããŸãã ã ãšããã§ãç§ã¯ããªãã®ã³ã¡ã³ãããšãŠãåãã§ããŸãã äžè¬çã«ã幞éãšå§ããŸãããã
ã¯ããã«
ãããã®æšå¥šäºé ã¯æ確ãªãã®ã§ã¯ãªããããäžè²«æ§ãããç解ããããã³ãŒããèšè¿°ããæ¹æ³ãåŠã¶ã®ã«åœ¹ç«ã€åºæ¬çãªã«ãŒã«ã§ãã ææ¡ãããã«ãŒã«ãå¹æçã«å®è¡ããã«ã¯ãä»ããéå§ããååãšå ±æããŠããéçšã«ç§»ããŠãã ããã ãã ãããããã®ã«ãŒã«ã«ãã ããã®ã§ã¯ãªããå®ãããªãéå¹æã«ãªãå¯èœæ§ããããŸãã 誰ããããŒã ã§å¿«é©ã«éãããããã«ã劥åç¹ãèŠã€ããããšããŸãã ã³ãŒãèšè¿°ã¹ã¿ã€ã«ã¯ãã¹ãŠã®äººã®ããžãã¹ã§ãããããèªååãããã³ãŒãã¹ã¿ã€ã«ãã§ãã¯ã¯éåžžã«äŸ¿å©ã§ãã
å 容
- ã¢ãžã¥ãŒã«
- å³æ Œã¢ãŒã
- ã¹ããŒã¹ã®ãã©ãŒããã
- ã»ãã³ãã³
- ã³ãŒãã¹ã¿ã€ã«
- ãšã©ãŒã³ãŒãåæ
- è¡
- å€æ°ã®åæå
- æ¡ä»¶ä»ãæ§é
- æ¯èŒ
- äžé æŒç®å
- æ©èœ
- ãããã¿ã€ããšç¶æ¿
- ãªããžã§ã¯ã
- é å
- æ£èŠè¡šçŸ
- éçºè ã³ã³ãœãŒã«
- ã³ã¡ã³ã
- åœå
- ããªãã£ã«ã©ã€ãã©ãª
- æ¯æ¥ã®ããªãã¯
- ES6ã¬ã€ã
ã¢ãžã¥ãŒã«
ãã®é ç®ã¯ãCommonJSãAMDãES6ã¢ãžã¥ãŒã«ãªã©ã®ã¢ãžã¥ã©ãŒã·ã¹ãã ã䜿çšããŠããããšãåæãšããŠããŸãã ã¢ãžã¥ã©ãŒã·ã¹ãã ã¯ãã°ããŒãã«ãªããžã§ã¯ãã«åœ±é¿ãäžããããšãªããåå¥ã®ã¹ã³ãŒãã§åäœããŸãããŸããäŸåé¢ä¿ã®èªåçæã«ãããããäœç³»åãããã³ãŒãæ§é ãæäŸãã <script>ã¿ã°ã®èªå·±æ¿å ¥ãã解æŸããŸãã
ã¢ãžã¥ã©ãŒã·ã¹ãã ã¯ãã³ãã¬ãŒããããŒãã§ããŸããããã¯ãåäžã®åé¢ãããã³ã³ããŒãã³ãã®ãã¹ãã«é¢ããŠãããŒã«ã«ãœãªã¥ãŒã·ã§ã³ã«åœ¹ç«ã¡ãŸãã
èªãã«ã¯ ïŒ
1. ã¢ãžã¥ãŒã«ãšã¯äœã§ããïŒ
2. CommonJSã¢ãžã¥ãŒã«
3. JSã®ã¢ãžã¥ãŒã«
å³æ Œã¢ãŒã
åžžã«ãå³å¯ãªäœ¿çšãã䜿çšããŸãã ã¢ãžã¥ãŒã«ã®äžéšã«ãããŸãã ã¹ããªã¯ãã¢ãŒãã§ã¯èšèªãšã©ãŒããã£ããã§ããŸãããããã¯å°ãæãååã§ããããã®ã¢ãŒãã§ã¯ã€ã³ã¿ãŒããªã¿ãŒãã³ãŒãã®å質ãç£èŠã§ããããããšã©ãŒã®ä¿®æ£ã«ãããæéãççž®ãããŸãã
èªæžãž
1. å³å¯ãªãã£ã¬ã¯ãã£ãã䜿çšãã
2. å³å¯ã¢ãŒã
ã¹ããŒã¹ã®ãã©ãŒããã
ã³ãŒãããã©ãŒããããããšãã«ã¹ããŒã¹ã®æ°ãå¶åŸ¡ããŸãã ãã®ããã .editorconfigæ§æãã¡ã€ã«ã䜿çšããããšããå§ãããŸã ã ãã®ãããªèšå®ã䜿çšããããšããå§ãããŸãã
# editorconfig.org root = true [*] indent_style = space indent_size = 2 end_of_line = lf charset = utf-8 trim_trailing_whitespace = true insert_final_newline = true [*.md] trim_trailing_whitespace = false
ã¿ããšã¹ããŒã¹ã®äœ¿çšã¯ããªãèªèº«ã®ä»äºã§ããã2ã€ã®ã¹ããŒã¹ãã€ã³ãã³ãããããšããå§ãããŸãã .editorconfigãã¡ã€ã«ã¯ãã¹ãŠãåŠçããTabããŒãæŒããŠããã©ãŒãããããã»ã¹ã¯å¶åŸ¡ãããŸãã
æ£ããã¿ãã ãã§ãªããé©åãªå Žæãããšãã°äœãã®åãåŸããŸãã¯éã®ã€ã³ãã³ãã調æŽããããšãã§ããŸãã 確ãã«ããããã®ããšãå¶åŸ¡ããããšã¯ããªãé¢åãªäœæ¥ã§ãã
function () {} function( a, b ){} function(a, b) {} function (a,b) {}
ã³ãŒãã®ãã©ãŒãããã®éããæå°éã«æããããã«ããŠãã ããã
å¯èœã§ããã°ãã³ãŒãã®èªã¿ããããæ¹åãã1è¡ã«æ倧80æåãæžã蟌ãããšããŸãã
èªæžãžïŒ
1. EditorConfig
2. ãã¹ãŠã®ãšãã£ã¿ãŒã«1ã€ã®èšå®
3. EditorConfigãSublimeããã¹ã3ã«ã€ã³ã¹ããŒã«ããŸã
4.80- æå
5. åªããããã°ã©ãã³ã°ã¹ã¿ã€ã«
ã»ãã³ãã³
ã»ãšãã©ã®JavaScriptããã°ã©ããŒã¯ã»ãã³ãã³ã䜿çšããããšã奜ã¿ãŸã ã èªå眮æïŒASIïŒãåé¿ããã«ã¯ãã»ãã³ãã³ãåžžã«èšå®ããå¿ èŠããããŸãã ã»ãã³ãã³ããªãã·ã§ã³ã§ããèšèªãããã誰ãããã«å ¥ããŸããã JavaScriptã§ã¯ãã©ã€ã³ãã£ãŒãã§çœ®ãæããããŸãããéšåçã«ã®ã¿ã§ãããããã£ãŠã ASIã«ãŒã«ãç解ããŠããå Žåã¯ãæ¹è¡ããã®ãæåã§ãã
ã³ãŒãã«èªä¿¡ããããšããäºå®ã«é¢ä¿ãªããããªããŒã¿ãŒïŒãªã³ã¿ãŒïŒã䜿çšããŠäžèŠãªã»ãã³ãã³ããã£ããããŸãã
èªæžãžïŒ
1. JavaScriptã»ãã³ãã³æ¿å ¥
2. ã³ãŒãã¹ã¿ã€ã«ã®ãã³ã
3. JavaScriptã³ãŒãã®å質ãæ¹åãã
4. ã»ãã³ãã³ã«ã€ããŠç¥ãå¿ èŠããããã¹ãŠ
5. ã»ãã³ãã³ã«é¢ããJSãªãŒããŒãžã®å ¬éæžç°¡
ã³ãŒãã¹ã¿ã€ã«
ããã¯æ°ã«ããªãã§ãã ãããããã¯ãä»ã®åéã§åãå³æ Œãªããªã·ãŒãé å®ããŠããéãé¡èãªæåããããããªããéåžžã«èŠçã§ã¹ãã¬ã¹ã®å€ãç¬éã§ãã
ãã¡ãããã³ãŒãèšèšïŒããã°ã©ãã³ã°ã¹ã¿ã€ã«ïŒïŒè±èªã®ã³ãŒãã£ã³ã°èŠçŽïŒã«ã¯ç¹å®ã®æšæºãååšããŸãã JavaScriptã®äžçã«ã¯ããã®æšæºã§ããJSCSïŒJavaScript Code StyleïŒã«æºæ ããŠãããã©ããã³ãŒãããã§ãã¯ããããŒã«ãããããŸãã å ±éã®ããã°ã©ãã³ã°ã¹ã¿ã€ã«ãæã€ããšã«ãããè€æ°ã®ããã°ã©ããŒã«ãã£ãŠèšè¿°ããããœãŒã¹ã³ãŒãã®ç解ãšä¿å®ã容æã«ãªãããœãããŠã§ã¢éçºã«ãããè€æ°ã®äººã ã®ããåããç°¡çŽ åãããŸãã
ãã®ãããªæšæºã«ã¯ãããã°ã©ããŒãšæé«ã®ããŒã ã®äž¡æ¹ãããã³äŒæ¥å šäœãå«ãŸããŸãã
1. Airbnb
2. ãã°ã©ã¹ã»ã¯ããã¯ãã©ãŒã
3. Google
4. ã°ã©ã³ã
5. æ £çšå¥
6. jQuery
7. MDCS
8. Node.js
9. ãŠã£ãã¡ãã£ã¢
10. ã¯ãŒããã¬ã¹
11. ã€ã³ããã¯ã¹
èªæžãžïŒ
1. ããã°ã©ãã³ã°ã¹ã¿ã€ã«
2. JavaScriptã³ãŒãã¹ã¿ã€ã«
ãšã©ãŒã³ãŒãåæ
äžæ¹ãæ€èšŒãå¿ èŠãªå ŽåããããŸãã ããªããŒã¿ã䜿çšããªãå Žåã¯ãã³ãŒããæ©èœããããšã確èªããããšãã°JSLintïŒããã°ã©ã ã³ãŒãã®å質ããã§ãã¯ããããã®ããŒã«ïŒã䜿çšããå¿ èŠã¯ãããŸããã ããã§ããJSHintãŸãã¯ESLintã®äœ¿çšããå§ãããŸãã
JSHintã䜿çšããããã®ãã³ãïŒ
- node_modulesãbower_componentsãªã©ã§.jshintignoreãã¡ã€ã«ã宣èšããŸã
- .jshintrcãã¡ã€ã«ã§ä»¥äžã®ã«ãŒã«ã䜿çšããŸã
{ "curly": true, "eqeqeq": true, "newcap": true, "noarg": true, "noempty": true, "nonew": true, "sub": true, "undef": true, "unused": true, "trailing": true, "boss": true, "eqnull": true, "strict": true, "immed": true, "expr": true, "latedef": "nofunc", "quotmark": "single", "indent": 2, "node": true }
ãã¡ããããããã®èŠåãå³å¯ã«é å®ããå¿ èŠã¯ãããŸããããããªããŒã¿ãšä»ã®ããã°ã©ãã³ã°ã¹ã¿ã€ã«ã®äžéç¹ãèŠã€ããããšãéèŠã§ãã
èªæžãžïŒ
1. JSLint
2. JSHint
3. ESlintãæ§æããããã®ããã€ãã®ãã³ã
4. åŽé«ãªããã¹ã3ã§ã®JSHintã®æ§æ
5. JavaScriptãªã³ãã£ã³ã°
è¡
ãã¹ãŠã®æååã«ã¯ãåãã¿ã€ãã®åŒçšç¬Šãå¿ èŠã§ãã ãã¹ãŠã®ã³ãŒãã§äžéåŒçšç¬ŠãŸãã¯äºéåŒçšç¬Šã䜿çšããŸãã
// var message = 'oh hai ' + name + "!";
// var message = 'oh hai ' + name + '!';
Node.jsã®util.formatã«äŒŒããã©ãŒãããé¢æ°ã䜿çšããå Žåãããã¯ããéãåäœããŸãã ããã«ãããè¡ã®æžåŒèšå®ãç°¡åã«ãªããã³ãŒãããã£ãšãããã«ãªããŸãã
// var message = util.format('oh hai %s!', name);
以äžã®ã³ãŒãã䜿çšããŠãåæ§ã®ãã®ãå®è£ ã§ããŸãã
function format () { var args = [].slice.call(arguments); var initial = args.shift(); function replacer (text, replacement) { return text.replace('%s', replacement); } return args.reduce(replacer, initial); }
è€æ°è¡ïŒè€æ°è¡ïŒã宣èšããã«ã¯ãç¹ã«HTMLã¹ããããã«é¢ããŠã¯ãé åãããŒã¿ãããã¡ãŒãšããŠäœ¿çšããæ¹ãããå ŽåããããŸããããŒã¿ãããã¡ãŒã®èŠçŽ ã¯ãããã«æååã«çµåã§ããŸãã ãã¡ãããæååã®é£çµïŒé£çµïŒã¯ããªãã¿ã®ã¹ã¿ã€ã«ã§ã¯ããã«ç°¡åã§ããããã¡ããé«éã«åäœããŸããã远跡ããã®ãé£ããå ŽåããããŸãã
var html = [ '<div>', format('<span class="monster">%s</span>', name), '</div>' ].join('');
ããŒãžããé åã«ç¬èªã®ã¹ãããããæ¿å ¥ããæåŸã«ããããçµåããŠã³ãŒããèªã¿ãããããããšãã§ããŸãã ããããJadeãªã©ã®äžéšã®ãã³ãã¬ãŒããšã³ãžã³ã®åäœæ¹æ³ã§ãã
èªæžãžïŒ
1. è¡
2. æååã䜿çšãã
3. æååé£çµã®ããã©ãŒãã³ã¹
4. åä»ãé åã«åºã¥ãæååã®Cã®ãããªè¡šçŸ
å€æ°ã®åæå
å€æ°ã¯åžžã«æå³ãšæå³ã§å®£èšããã¹ã³ãŒãã®äžéšã§ä¿®æ£ããŸãã åè¡ã®å€æ°ãåå¥ã«åæåããŠãã ããã ãã¡ããã varã¹ããŒãã¡ã³ãã1å宣èšããå€æ°ãã³ã³ãã§åºåã£ãŠæå®ã§ããŸããããããžã§ã¯ãå šäœã§äžè²«æ§ãä¿ã€å¿ èŠããããŸãã
// var foo = 1, bar = 2; var baz; var pony; var a , b;
// var foo = 1; if (foo > 1) { var bar = 2; }
ãšã«ãããç¹å®ã®å€æ°ã宣èšãããŠããå Žæãæ£ç¢ºã«èŠãããšãã§ããŸã
// var foo = 1; var bar = 2; var baz; var pony; var a; var b;
// var foo = 1; var bar; if (foo > 1) { bar = 2; }
空ã®å€æ°ã¯ãã³ã³ãã§åºåãããåäžè¡ãšããŠå®£èšã§ããŸãã
// var a = 'a'; var b = 2; var i, j;
æ¡ä»¶ä»ãæ§é
äžæ¬åŒ§ã䜿çšããŸãã å Žåã«ãã£ãŠã¯ãããã«ãããSSL / TLSã»ãã¥ã¢æ¥ç¶ãããã³ã«ã®äœ¿çšäžã«Apple補åã®é倧ãªãã°ãåé¿ã§ããŸãã
// if (err) throw err;
// if (err) { throw err; }
å 容ãç解ããããã«ãæ¡ä»¶ãããã¯ã®å 容ãè€æ°è¡ã«ç¶æããŠãã ããã
// if (err) { throw err; }
èªæžãžïŒ
1. Appleã®SSL / TLSãã°
2. ããã§ã¯å€±æã§ã
æ¯èŒ
== andïŒ=æŒç®åã®äœ¿çšãé¿ãããã奜ãŸããæ¯èŒæŒç®å=== andïŒã䜿çšããŠãã ããã ==ã ãããã®æŒç®åã¯ç¡¬æ¯èŒæŒç®åãšåŒã°ããŸããã代æ¿ïŒ==ããã³ïŒ=ïŒãªãã©ã³ããåãããŒã¿åã«å€æããŸãã
// function isEmptyString (text) { return text == ''; } isEmptyString(0); // <- true
// function isEmptyString (text) { return text === ''; } isEmptyString(0); // <- false
äžé æŒç®å
äžé æŒç®åã¯æ確ã«ç¹å®ã®æ¡ä»¶ã«é©ããŠããããã«ãã³ã³ããŒãã³ãã«ã¯ãŸã£ããé©ããŠããŸããã äžè¬ã«ãèšç·Žãããç®ãäžé æŒç®åã®ç¶æ ãè³ãããã¹ããããã«èªãã§è§£éã§ããã»ã©æ©ãèŠã€ããããªãå Žåã¯ãäžæ¬¡æŒç®åã䜿çšããªãã§ãã ããã
jQueryã¯ã åä»ãª3æ¹åæŒç®åã§æºãããã代衚çãªäŸã§ãã
// function calculate (a, b) { return a && b ? 11 : a ? 10 : b ? 1 : 0; }
// function getName (mobile) { return mobile ? mobile.name : 'Generic Player'; }
æ¡ä»¶ããããã«ããå Žåã¯ãåã«ifããã³elseã䜿çšããŸã ã
æ©èœ
é¢æ°ãåæåãããšãã¯ã é¢æ°åŒã®ä»£ããã«é¢æ° 宣èšã䜿çšããŸã ã ããã¯ãã¹ãŠãå€æ°ã®ãçºçããšé¢æ°ã®å®£èšã«åœ±é¿ããŸãã
// var sum = function (x, y) { return x + y; };
// function sum (x, y) { return x + y; }
ã«ãªãŒåã§é¢æ°åŒã䜿çšããå Žåãé¢æ°åŒã«åé¡ã¯ãããŸããã
é¢æ°ã®é¢æ°å®£èšãäžèšã®ã¹ã³ãŒãã§äœ¿çšã§ãããããé¢æ°ã宣èšãããé åºã«é¢ä¿ãªããããã¯ãã¹ãŠéèŠã§ãã ååãšããŠãåžžã«ã°ããŒãã«ã¹ã³ãŒãã§é¢æ°ã宣èšããå¿ èŠããããŸããããã®ãããªé¢æ°ãæ¡ä»¶ã¹ããŒãã¡ã³ãå ã«é 眮ããªãããã«ããå¿ èŠããããŸãã
// if (Math.random() > 0.5) { sum(1, 3); function sum (x, y) { return x + y; } }
// if (Math.random() > 0.5) { sum(1, 3); } function sum (x, y) { return x + y; }
// function sum (x, y) { return x + y; } if (Math.random() > 0.5) { sum(1, 3); }
空ã®ïŒ no-op ïŒã¡ãœãããå¿ èŠãªå Žåã¯ã Function.prototypeãããã¿ã€ãã䜿çšããŠæ¡åŒµæ©èœã䜿çšãããã é¢æ°noopïŒïŒ{} functionã䜿çšã§ããŸã ã ãŸããçæ³çã«ã¯ãã¢ããªã±ãŒã·ã§ã³å šäœã§äœ¿çšãããç¬èªã®ã¡ãœãããžã®åç §ã1ã€å¿ èŠã§ãã åãã¿ã€ãã®ã³ãŒãæ§æãèšè¿°ãã代ããã«ãã¡ãœããã¯ãã®ãããªæ§æã®ãã³ãã¬ãŒãã«ãªããŸãã
// var divs = document.querySelectorAll('div'); for (i = 0; i < divs.length; i++) { console.log(divs[i].innerHTML); }
// var divs = document.querySelectorAll('div'); [].slice.call(divs).forEach(function (div) { console.log(div.innerHTML); });
Function.prototypeé¢æ°ã®ãããã¿ã€ãã®.callïŒïŒé¢æ°ã䜿çšããŠãã€ã³ããè¡ãããšãã§ããArray.prototype.slice.callïŒïŒã䜿çšãã代ããã«ã¬ã³ãŒãã[] .slice.callïŒåŒæ°ïŒã«ççž®ããããšãã§ããŸãã ãããã®å Žåã§ããbindïŒïŒé¢æ°ã䜿çšããŠåçŽåã§ããŸãã
ãã ãããã®ã¢ãããŒãã䜿çšãããšãV8ãšã³ãžã³ã®ããã©ãŒãã³ã¹ãå€§å¹ ã«äœäžããããšã«æ³šæããŠãã ããã
// var args = [].slice.call(arguments);
// var i; var args = new Array(arguments.length); for (i = 0; i < args.length; i++) { args[i] = arguments[i]; }
ã«ãŒãå ã§é¢æ°ã宣èšããªãã§ãã ãã
// var values = [1, 2, 3]; var i; for (i = 0; i < values.length; i++) { setTimeout(function () { console.log(values[i]); }, 1000 * i); }
// var values = [1, 2, 3]; var i; for (i = 0; i < values.length; i++) { setTimeout(function (i) { return function () { console.log(values[i]); }; }(i), 1000 * i); }
// var values = [1, 2, 3]; var i; for (i = 0; i < values.length; i++) { setTimeout(function (i) { console.log(values[i]); }, 1000 * i, i); }
// var values = [1, 2, 3]; var i; for (i = 0; i < values.length; i++) { wait(i); } function wait (i) { setTimeout(function () { console.log(values[i]); }, 1000 * i); }
ãŸãã¯ãã«ãŒãå ã®é¢æ°ã®ãŠãŒã¹ã±ãŒã¹ã«æé©åããã.forEachã䜿çšããã ãã§ãã
// [1, 2, 3].forEach(function (value, i) { setTimeout(function () { console.log(value); }, 1000 * i); });
åŒã³åºãã¹ã¿ãã¯ãã¯ããã«ç°¡åã«è¡šç€ºããã«ã¯ãå¿åé¢æ°ã®äœ¿çšãæžããå¿ èŠããããŸãã ã€ãŸãããã¹ãŠã®ã³ãŒã«ããã¯ãå¿åé¢æ°ãšããŠå²ãåœãŠãããšã«æ £ããŠããå Žåã¯ããããã«ååãä»ããŠã¿ãããšãã§ããŸãã ããã«ãããã¹ã¿ãã¯ãã¬ãŒã¹ã®åææã«äŸå€ã®æ ¹æ¬åå ãç¹å®ãããŸãã
// function once (fn) { var ran = false; return function () { if (ran) { return }; ran = true; fn.apply(this, arguments); }; }
// function once (fn) { var ran = false; return function run () { if (ran) { return }; ran = true; fn.apply(this, arguments); }; }
é¢æ°å ã®ãã¹ããããæ¡ä»¶ã¯é¿ããŠãã ããã空ã®æ»ãå€ã䜿çšããæ¹ãè¯ãå ŽåããããŸãããã®ãããã³ãŒããèªã¿ããããªããŸãã
// function foo (car, black, turbine) { if (car) { if (black) { if (turbine) { return 'batman!'; } } } }
// function fn (condition) { if (condition) { // 10+ } }
// function foo (car, black, turbine) { if (!car) { return; } if (!black) { return; } if (!turbine) { return; } return 'batman!'; }
é¢æ°ãäœãè¿ããªããã空ã®æ»ããè¿ãå Žåã undefinedãè¿ããŸãã
// function fn (condition) { if (!condition) { return; } // 10+ }
èªæžãžïŒ
1. JavaScriptã®ã¹ã³ãŒããšå€æ°ããã³é¢æ°å®£èšã®ãçºçã
2. ã«ã¬ãŒ
3. 空ã®é¢æ°ã䜿çšããjQueryãäŸãšããŠäœ¿çšããŸã
4. é åã®ãããªãªããžã§ã¯ã
5. ã¹ã¿ãã¯ãã¬ãŒã¹
6. éåæåŒã³åºãã¹ã¿ãã¯ã§JavaScriptããããã°ããããã®ãã³ã
7. é¢æ°ã§ã®JavaScriptã®æ»ãå€ãæªå®çŸ©ãè¿ã
ãããã¿ã€ããšç¶æ¿
ããããã³ã¹ãã§æšæºãããã¿ã€ããæ¡åŒµããããšã¯é¿ããŠãã ããã èšèªã®ãã€ãã£ãããŒã¿å ïŒæ§é ïŒã®æ©èœãæ¡åŒµããå¿ èŠãããå Žåã¯ã ããŒã¶ãŒã©ã€ãã©ãªã䜿çšããããããŒã¿æ§é ã®ç¬èªã®å®è£ ãéçºããŸãã
åºæ¬çãªããŒã¿æ§é ïŒ
ããªããã£ãå€ãšãªããžã§ã¯ãå€ãæ··åããªãã§ãã ããïŒStringãNumberãBooleanã®å Žåã¯trueïŒã
// String.prototype.half = function () { return this.substr(0, this.length / 2); };
// function half (text) { return text.substr(0, text.length / 2); }
ãããã¿ã€ãç¶æ¿ã¢ãã«ã¯ããã©ãŒãã³ã¹ã«åœ±é¿ããå¯èœæ§ããããããé¿ããŠãã ããã JavaScriptã§ããã°ã©ãã³ã°ããéã®ããããééãã®1ã€ã¯ãåºæ¬çãªãããã¿ã€ãã®æ¡åŒµã§ãã ã¢ã³ããŒãããã³ã°ãšåŒã°ãããã®æè¡ã¯ãã«ãã»ã«åã®ååã«éåããŠããŸãã Prototype.jsãªã©ã®åºã䜿çšãããŠãããã¬ãŒã ã¯ãŒã¯ã§äœ¿çšãããŠãããšããäºå®ã«ãããããããçŸæç¹ã§ã¯ããã䜿çšããåççãªçç±ã¯ãããŸããã åºæ¬ãããã¿ã€ããæ¡åŒµããå¯äžã®æ£åœåã¯ããããããµããŒãããªãå€ãããŒãžã§ã³ã®èšèªã®ããã«ãArray.forEachãªã©ã®æ°æ©èœããšãã¥ã¬ãŒãããããšã ãã§ãã
- ãããã¿ã€ãç¶æ¿ã§ã¯ãåžžã«thisããŒã¯ãŒãã䜿çšããå¿ èŠããããŸã
- åçŽãªãªããžã§ã¯ãã䜿çšãããããå€ãã®æœè±¡åããããŸãã
- ããã¯ãæ°ãããªããžã§ã¯ããäœæããéã®é çã®åå ã§ãã
- ã·ã³ãã«ãªãªããžã§ã¯ãã䜿çšããŠã¿ãŠãã ãã
èªæžãžïŒ
1. JavaScriptã®ããŒã¿åãšããŒã¿æ§é
2. ããŒã¿åã®å®çŸ©
3. ãããã¿ã€ããšã¯äœã§ããïŒ
4. ãããã¿ã€ãæåããã°ã©ãã³ã°
5. ç¶æ¿ãšãããã¿ã€ããã§ãŒã³
6. ãããšå®éã®ã³ã³ããã¹ãã®å®çŸ©ãšã¯
ãªããžã§ã¯ã
ãªããžã§ã¯ããåæåããã«ã¯ãäžæ¬åŒ§{}ã䜿çšã§ããŸããããã¯ãªããžã§ã¯ããªãã©ã«ã«ãªããŸãã çŽç²ãªã³ã³ã¹ãã©ã¯ã¿ãŒã䜿çšããŠãªããžã§ã¯ããäœæãã代ããã«ããã¡ã¯ããªãŒäœæã¢ãããŒãã䜿çšããŸãã
ãªããžã§ã¯ãã®äœæïŒ
var World = {}; // , console.log(World); // Object {}
var World = { people: "~ 7 .", country: "~ 258 " }; console.log(World); // Object {people: "~ 7 .", country: "~ 258 "}
ã«ã¹ã¿ã ãããã¿ã€ãã䜿çšãããªããžã§ã¯ãã®äœæïŒã³ã³ã¹ãã©ã¯ã¿ãŒã®äœ¿çšãžã®ã¢ãããŒãïŒïŒ
// // , - var TemplateWorld = function(_people, _country) { // , this // TemplateWorld this.people = _people; this.country = _country; } // ( ) var World = new TemplateWorld("~ 7 .", "~ 258 "); console.log(World); // TemplateWorld {people: "~ 7 .", country: "~ 258 "}
ã«ã¹ã¿ã ãããã¿ã€ãã䜿çšãããªããžã§ã¯ãã®äœæïŒãã¡ã¯ããªãŒã®äœ¿çšãžã®ã¢ãããŒãïŒïŒ
// var TemplateWorld = function(_people, _country) { return { people: _people, country: _country }; } var World = TemplateWorld("~ 7 .", "~ 258 "); console.log(World); // Object {people: "~ 7 .", country: "~ 258 "}
ãããã¿ã€ãäœæã®è¯ãäŸïŒ
// function util (options) { // var foo; function add () { return foo++; } function reset () { // , foo = options.start || 0; } reset(); return { // uuid: add }; }
åç §ã«ããã³ããŒãšå€æž¡ã
ããæ確ãã€ééçã«ãã¡ã¢ãªã»ã«éã§ããŒã¿ã転éãããæ¹æ³ã¯ãC / C ++ã§èŠãããšãã§ããŸãã ããããJavaScriptã§ã¯ããªããžã§ã¯ãã®åäœã®ã¡ã«ããºã ãèŠããŠããããšã¯éåžžã«æãŸããããšã§ãããããããšãããã€ãã®è³ªåãããã«æ¶ããŠããŸããŸãã
å€æ°
// // , var a = 'text'; var b = a; // a = 'update'; console.log(a); // update console.log(b); // text
ãªããžã§ã¯ã
// // JavaScript c var a = {foo: 'bar'}; var b = a; // // b - a a.foo = 'foo'; console.log(a); // Object {foo: 'foo'} console.log(b); // Object {foo: 'foo'} b.foo = 'bar'; console.log(a); // Object {foo: 'bar'} console.log(b); // Object {foo: 'bar'}
èªæžãžïŒ
1. ãªããžã§ã¯ãïŒåç §ã«ãã転é
é å
é åãåæåããã«ã¯ãè§æ¬åŒ§[]ã䜿çšã§ããŸããããã¯é åã®ãªãã©ã«ã«ãªããŸãã ããã©ãŒãã³ã¹ãåäžãããããã«ã æ°ããé åïŒ length ïŒæ§é ãšãã®é·ãïŒé åã®ãµã€ãºïŒã䜿çšããŠé åãäœæã§ããŸãã
é åèŠçŽ ãé©åã«æäœããã«ã¯ãæšæºã®ã¡ãœãããç¥ãå¿ èŠããããŸãã ãã¹ãŠãæ³åãããã¯ããã«ç°¡åã§ãã
æšæºçãªæ¹æ³ïŒ
ããé«åºŠãªæ¹æ³ïŒ
ãªã³ã¯ã§ã³ããŒ
// - var a = [1, 2, 3]; var b = a; // // b - a a[2] = 4; console.log(a); // [1, 2, 4] console.log(b); // [1, 2, 4] b[2] = 3; console.log(a); // [1, 2, 3] console.log(b); // [1, 2, 3]
æšæºçãªæ¹æ³ã®ç 究ãå§ããŸãããïŒ
- èŠçŽ ã®åæã¯.forEachã䜿çšããŠè¡ãããŸã
- .someããã³.everyã§ãã§ãã¯ããŸã
- .joinããã³.concatãšããŒãž
- .popã.pushã.shiftãããã³.unshiftã䜿çšããŠã¹ã¿ãã¯ãšãã¥ãŒãæäœããŸã
- å埩ã¡ãœããïŒãããã³ã°ïŒ.map
- .filterãªã¯ãšã¹ãã®å®è¡
- .sortã§äžŠã¹æ¿ã
- .reduceã.reduceRightã«ããèšç®
- .sliceã§ã³ããŒ
- .spliceèŠçŽ ãåé€ããã³è¿œå ããããã®ãã匷åãªããŒã«
- .indexOfé åå ã®ã¢ã€ãã ãæ€çŽ¢ãã
- inæŒç®åãæ¯æŽããã«ã¯
- éé ã§ã®å埩ããŸãã¯.reverseã䜿çšããé åã®å転

èŠçŽ ã®åæã¯.forEachã䜿çšããŠè¡ãããŸã
ããã¯ãJavaScriptã§æãç°¡åãªæ¹æ³ã®1ã€ã§ãã IE7ããã³IE8ã§ã¯ãµããŒããããŠããŸããã
ã³ãŒã«ããã¯é¢æ°ãåãå ¥ããŸããããã¯ãé åå ã®åèŠçŽ ã«å¯ŸããŠ1ååŒã³åºããã3ã€ã®äž»èŠãªåŒæ°ãä»ããŠæž¡ãããŸãã
- value-é åã®çŸåšã®èŠçŽ ãå«ãå€
- index-é åå ã®èŠçŽ ã®äœçœ®
- é å-é åãžã®åç §ã§ã
ããã«ããªãã·ã§ã³ã®2çªç®ã®åŒæ°ïŒãªããžã§ã¯ããé åãå€æ°ãªã©ïŒãæž¡ãããšãã§ããŸãããã®åŒæ°ã¯ã³ãŒã«ããã¯é¢æ°ã§äœ¿çšã§ããã³ã³ããã¹ãïŒthisïŒãšããŠè¡šç€ºãããŸãã
['_', 't', 'a', 'n', 'i', 'f', ']'].forEach(function (value, index, array) { this.push(String.fromCharCode(value.charCodeAt() + index + 2)) }, out = []) out.join('') // <- 'awesome'
ç§ãã¡ã¯ã ãŸããŠããŸã èããŠããªã.joinã§ãããããã«ããã«å°éããŸãã ç§ãã¡ã®å Žåãé åå ã®ããŸããŸãªèŠçŽ ãçµã¿åãããŠããŸãããã®ã¡ãœããã¯ãæåã§out [0] + '' + out [1] + '' + out [2] + '' + out [n]ãããããã¯ããã«å¹ççã«æ©èœããŸãã ãšããã§ãbreakã䜿çšããéåžžã®å埩ã§è¡ãããããã«ãforeachã«ãŒããäžæããããšã¯ã§ããŸããã 幞ããªããšã«ãä»ã®æ¹æ³ããããŸãã
.someããã³.everyã§ãã§ãã¯ããŸã
ãããã®ã¡ãœããã¯ãã¢ãµãŒãé¢æ°ã«é¢é£ããŠããŸãã .NETã§åæåã䜿çšããããšãããå Žåã¯ãããããããšãã§ãã.AnyïŒx => x.IsAwesomeïŒããã³.AllïŒx => x.IsAwesomeïŒã«äŒŒãŠããããšãããããŸãã
ãããã®ã¡ãœããã¯ãåãåŒæ°ãæã€ã³ãŒã«ããã¯é¢æ°ãåãå ¥ãããšããç¹ã§.forEachã«äŒŒãŠããŸãããæ§è³ªããããã«ç°ãªããŸãã
someïŒïŒã¡ãœããã¯ãã³ãŒã«ããã¯ãtrueå€ïŒããŒã«åã«ãã£ã¹ãããããšãã«trueã«ãªãå€ïŒãè¿ãèŠçŽ ãèŠã€ãããŸã§ãé åã«ååšããåèŠçŽ ã«å¯ŸããŠæž¡ãããã³ãŒã«ããã¯é¢æ°ã1ååŒã³åºããŸãã ãã®ãããªèŠçŽ ãèŠã€ãã£ãå ŽåãsomeïŒïŒã¡ãœããã¯ããã«trueãè¿ããŸãã ããã§ãªãå Žåãã³ãŒã«ããã¯ãé åã®ãã¹ãŠã®èŠçŽ ã«å¯ŸããŠfalseãè¿ããšãsomeïŒïŒã¡ãœããã¯falseãè¿ããŸãã ã³ãŒã«ããã¯é¢æ°ã¯ãå€ãå²ãåœãŠãããé åã€ã³ããã¯ã¹ã«å¯ŸããŠã®ã¿åŒã³åºãããŸãã åé€ãããã€ã³ããã¯ã¹ããŸãã¯å€ãå²ãåœãŠãããŠããªãã€ã³ããã¯ã¹ã«å¯ŸããŠã¯åŒã³åºãããŸããã
max = -Infinity satisfied = [10, 12, 10, 8, 5, 23].some(function (value, index, array) { if (value > max) max = value return value < 10 }) console.log(max) // <- 12 satisfied // <- true
.everyïŒïŒã¡ãœãããåãããã«æ©èœããŸãããã¯ããŒãžã£ãŒã¯ã³ãŒã«ããã¯é¢æ°ãåœã§ã¯ãªãåœãè¿ãããšãã«ã®ã¿çºçããŸãã
.joinããã³.concatãšããŒãž
ãåç¥ã®ããã«ã.joinã¡ãœããã¯.concatã¡ãœãããšæ··åãããããšããããããŸãããã®ã¡ãœããã¯åŒæ°.joinïŒã»ãã¬ãŒã¿ãŒïŒã«ã»ãã¬ãŒã¿ãŒãåããã¹ããªã³ã°ãäœæããŸãããã®çµæãé åã®åèŠçŽ ãåãããã®ã¹ããªã³ã°å ã®ã»ãã¬ãŒã¿ãŒã§ããããåºåããŸãã åºåãæåãæå®ãããŠããªãå Žåãããã©ã«ãã§ã¯åºåãæå= 'ã'ã«ãªããŸãã concatïŒïŒã¡ãœããã¯ãåŒã³åºãããé åãä»ã®é åã«æ¥ç¶ãããé åãããã³/ãŸãã¯åŒæ°ãšããŠæž¡ãããå€ã§æ§æãããæ°ããé åãè¿ããŸãã
- .concatã¯æ¬¡ã®ååã§æ©èœããŸãïŒarray.concatïŒvalãval2ãval3ãvalnïŒ
- .concatã¯æ°ããé åãè¿ããŸã
- åŒæ°ãªãã®array.concatïŒïŒã¯ãé åã®äžå®å šãªã³ããŒãè¿ããŸã
äžå®å šãªã³ããŒãšã¯ãã³ããŒã«å ã®é åãšåããªããžã§ã¯ãåç §ãå«ãŸããããšãæå³ããŸãã
ååãšããŠãå ã®é åãšæ°ããé åã®äž¡æ¹ãåããªããžã§ã¯ããåç §ããŸãã
ã€ãŸããåç §ã«ãã£ãŠãªããžã§ã¯ããå€æŽãããå Žåãæ°ããé åãšå ã®é åã®äž¡æ¹ã§å€æŽã衚瀺ãããŸãã
var a = { foo: 'bar' } var b = [1, 2, 3, a] var c = b.concat() console.log(b === c) // <- false a.foo = 'foo'; console.log(b); // [1, 2, 3, Object {foo: 'foo'}] console.log(c); // [1, 2, 3, Object {foo: 'foo'}] b[3] === a && c[3] === a // <- true
.popã.pushã.shiftãããã³.unshiftã䜿çšããŠã¹ã¿ãã¯ãšãã¥ãŒãæäœããŸã
çŸåšãé åã®æ«å°Ÿãžã®èŠçŽ ã®è¿œå ã¯.pushã䜿çšããŠè¡ãããããšã誰ããç¥ã£ãŠããŸãããããŠããã®æ§é [] .pushïŒ 'a'ã 'b'ã 'c'ã 'd'ã 'z'ïŒã䜿çšããŠãäžåºŠã«è€æ°ã®èŠçŽ ãè¿œå ã§ããŸããïŒ
var a = [].push('a', 'b', 'c', 'd', 'z'); console.log(a); // 5
var a = []; a.push('a', 'b', 'c', 'd', 'z'); console.log(a); // ['a', 'b', 'c', 'd', 'z']
popïŒïŒã¡ãœããã¯ãé åããæåŸã®èŠçŽ ãåé€ãããã®å€ãè¿ããŸããé åã空ã®å ŽåãundefinedïŒvoid 0ïŒãè¿ãããŸãã
.pushãš.popã䜿çšããŠãç¬èªã®LIFOã¹ã¿ãã¯æ§é ãéçºã§ããŸãã
function Stack () { this._stack = [] } Stack.prototype.next = function () { return this._stack.pop() } Stack.prototype.add = function () { return this._stack.push.apply(this._stack, arguments) } stack = new Stack() stack.add(1, 2, 3) stack.next() // <- 3 stack.next() // <- 2 stack.next() // <- 1 stack.next() // <- undefined
éã«ã.unshiftãš.shiftã䜿çšããŠFIFOãã¥ãŒãäœæã§ããŸãã
function Queue () { this._queue = [] } Queue.prototype.next = function () { return this._queue.shift() } Queue.prototype.add = function () { return this._queue.unshift.apply(this._queue, arguments) } queue = new Queue() queue.add(1,2,3) queue.next() // <- 1 queue.next() // <- 2 queue.next() // <- 3 queue.next() // <- undefined
é åèŠçŽ ã®ã»ããã®ã«ãŒãã§.shiftïŒãŸãã¯.popïŒã䜿çšãããšãããã»ã¹ã§ãããã¯ãªã¢ã§ããŸãã
list = [1,2,3,4,5,6,7,8,9,10] while (item = list.shift()) { console.log(item) } list // <- []
å埩ã¡ãœããïŒãããã³ã°ïŒ.map
mapïŒïŒã¡ãœããã¯ãé åã®åèŠçŽ ã«å¯ŸããŠæå®ãããé¢æ°ãåŒã³åºããçµæã§æ°ããé åãäœæããŸãã
mapã¡ãœããã¯ãæž¡ãããã³ãŒã«ããã¯é¢æ°ãèŠçŽ ããšã«1åãã€åŒã³åºããŠãåŒã³åºãã®çµæããæ°ããé åãæ§ç¯ããŸããã³ãŒã«ããã¯é¢æ°ã¯ãæªå®çŸ©ãå«ãå€ãå²ãåœãŠãããé åã€ã³ããã¯ã¹ã«å¯ŸããŠã®ã¿åŒã³åºãããŸããäžè¶³ããŠããé åèŠçŽ ïŒã€ãŸããèšå®ãããŠããªãã€ã³ããã¯ã¹ãåé€ãããã€ã³ããã¯ã¹ããŸãã¯å€ãå²ãåœãŠãããŠããªãã€ã³ããã¯ã¹ïŒã«å¯ŸããŠã¯åŒã³åºãããŸããã
Array.prototype.mapã¡ãœããã«ã¯ã.forEachã.someã.everyãšåãã·ã°ããã£ããããŸãã.map
ïŒfnïŒå€ãã€ã³ããã¯ã¹ãé åïŒãthisArgumentïŒã
values = [void 0, null, false, ''] values[7] = 'text' result = values.map(function(value, index, array){ console.log(value) return value }) // <- [undefined, null, false, '', undefined à 3, undefined] console.log(result[7]); // text
undefinedÃ3-åé€ãŸãã¯å²ãåœãŠãããŠããªãé åã®èŠçŽ ã«å¯ŸããŠ.mapã¡ãœãããæ©èœããªãã£ãããçµæã®é åã«å«ãŸããŠããããšã説æããŠããŸãã.mapã¡ãœããã¯ãé åã®å€æã«äœ¿çšãããŸãã
// [1, '2', '30', '9'].map(function (value) { return parseInt(value, 10) }) // 1, 2, 30, 9 [97, 119, 101, 115, 111, 109, 101].map(String.fromCharCode).join('') // <- 'awesome' // items.map(function (item) { return { id: item.id, name: computeName(item) } })
.filterãªã¯ãšã¹ãã®å®è¡
filterïŒïŒã¡ãœããã¯ãæž¡ãããé¢æ°ã§æå®ããããã¹ãã«åæ Œãããã¹ãŠã®èŠçŽ ãå«ãæ°ããé åãäœæããŸãã
filterïŒïŒã¡ãœããã¯ãé åã«ååšããåèŠçŽ ã«å¯ŸããŠæž¡ãããã³ãŒã«ããã¯é¢æ°ã1ååŒã³åºããã³ãŒã«ããã¯é¢æ°ãtrueãè¿ãããã¹ãŠã®å€ãŸãã¯ããŒã«å€ã«ãã£ã¹ãããããšãã«trueã«ãªãå€ã§æ°ããé åãäœæããŸããã³ãŒã«ããã¯é¢æ°ã¯ãå€ãå²ãåœãŠãããé åã€ã³ããã¯ã¹ã«å¯ŸããŠã®ã¿åŒã³åºãããŸããåé€ãããã€ã³ããã¯ã¹ããŸãã¯å€ãå²ãåœãŠãããŠããªãã€ã³ããã¯ã¹ã«å¯ŸããŠã¯åŒã³åºãããŸãããã³ãŒã«ããã¯é¢æ°ã«å€±æããé åèŠçŽ ã¯åã«ã¹ããããããæ°ããé åã«ã¯å«ãŸããŸããã
éåžžã©ããïŒ.filterïŒfnïŒå€ãã€ã³ããã¯ã¹ãé åïŒãthisArgumentïŒã.filterãã³ãŒã«ããã¯é¢æ°ã®ãã§ãã¯ã«åæ ŒããèŠçŽ ã®ã¿ãè¿ãããšãèãããšãããã€ãã®èå³æ·±ã䜿çšäŸããããŸãã
[void 0, null, false, '', 1].filter(function (value) { return value }) // <- [1] [void 0, null, false, '', 1].filter(function (value) { return !value }) // <- [void 0, null, false, '']
.sortã§äžŠã¹æ¿ã
sortïŒïŒã¡ãœããã¯ãé åã®èŠçŽ ããã®å Žã§ãœãŒããããœãŒããããé åãè¿ããŸãããœãŒãã¯å¿ ãããå®å®ããŠãããšã¯éããŸãããããã©ã«ãã®ãœãŒãé ã¯ãUnicodeã³ãŒããã€ã³ãã®é åºã«å¯Ÿå¿ããŠããŸãã
ã·ã°ããã£ã¯ã»ãšãã©ã®ãœãŒãé¢æ°ãšåãã§ãïŒArray.prototype.sortïŒfnïŒaãbïŒïŒãã¡ãœããã¯2ã€ã®èŠçŽ ããã§ãã¯ããã³ãŒã«ããã¯ãåãå ¥ããŸãããã®çµæãã¿ã¹ã¯ã«å¿ããŠãæ»ãå€ã¯æ¬¡ã®ããã«ãªããŸãã
- æ»ãå€<0ãaã¯bã®å
- æ»ãå€=== 0 aãšbã®äž¡æ¹ãåçãšèŠãªãããå Žå
- aãbã®å Žåãæ»ãå€> 0
[9,80,3,10,5,6].sort() // <- [10, 3, 5, 6, 80, 9] [9,80,3,10,5,6].sort(function (a, b) { return a - b }) // <- [3, 5, 6, 9, 10, 80]
.reduceã.reduceRightã«ããèšç®
reduceïŒïŒã¡ãœããã¯ãvoidsãé€ããé åã«ååšããåèŠçŽ ã«å¯ŸããŠã³ãŒã«ããã¯é¢æ°ã1åå®è¡ããŸãã4ã€ã®åŒæ°ãåããŸãïŒåæå€ïŒãŸãã¯åã®ã³ãŒã«ããã¯åŒã³åºãããã®å€ïŒãçŸåšã®èŠçŽ ã®å€ãçŸåšã®ã€ã³ããã¯ã¹ãããã³å埩ãããé åã
äžè¬ã«ãreduceïŒïŒã¡ãœãããšreduceRightïŒïŒã¡ãœããã¯åäžã§ãããã ããreduceïŒïŒã¡ãœããã®èŠçŽ ã®åæã¯å·Šããå³ã«ãreduceRightïŒïŒã¡ãœããã§ã¯å³ããå·Šã«ãªããŸãã
äž¡æ¹ã®ã¡ãœããã«ã¯ã次ã®ã·ã°ããã£ããããŸãïŒreduceïŒã³ãŒã«ããã¯ïŒpreviousValueãcurrentValueãindexãarrayïŒãinitialValueïŒã
é¢æ°ãåããŠåŒã³åºããããšããpreviousValueãã©ã¡ãŒã¿ãŒãšcurrentValueãã©ã¡ãŒã¿ãŒã¯2ã€ã®å€ã®ãããããåãããšãã§ããŸããreduceïŒïŒãåŒã³åºããããšãã«initialValueåŒæ°ãæž¡ãããå ŽåãpreviousValueå€ã¯initialValueå€ãšçãããªããcurrentValueå€ã¯é åã®æåã®å€ãšçãããªããŸããinitialValueåŒæ°ãæå®ãããŠããªãå ŽåãpreviousValueå€ã¯é åã®æåã®å€ã«çãããªããcurrentValueã¯é åã®2çªç®ã®å€ã«çãããªããŸãã
.reduce sumé¢æ°ã®å žåçãªäœ¿çšäŸã®1ã€ã¯æ¬¡ã®ãšããã§ãã
Array.prototype.sum = function () { return this.reduce(function (partial, value) { return partial + value }, 0) }; [3,4,5,6,10].sum() // <- 28
è€æ°ã®è¡ãé£çµããããšããŸãããã®ç®çã§.joinã䜿çšã§ããŸãããããããªããžã§ã¯ãã®å Žåãããã¯æ©èœããŸããããããã£ãŠã
function concat (input) { return input.reduce(function (partial, value) { if (partial) { partial += ', ' } return partial + value.name }, '') } concat([ { name: 'George' }, { name: 'Sam' }, { name: 'Pear' } ]) // <- 'George, Sam, Pear'
.sliceã§ã³ããŒ
.concatãšåæ§ã«ãåŒæ°ãªãã§.sliceãåŒã³åºããšãå ã®é åã®äžå®å šãªã³ããŒãçæãããŸãããã®é¢æ°ã¯ãéå§äœçœ®ãšçµäºäœçœ®ã®2ã€ã®åŒæ°ãåããŸããArray.prototype.sliceã䜿çšããŠãé åããªããžã§ã¯ãã«ããŸãã¯ãã®éãé åã«å€æã§ããŸãã
Array.prototype.slice.call({ 0: 'a', 1: 'b', length: 2 }) // <- ['a', 'b']
ãã ããããã¯.concatã§ã¯æ©èœããŸããã
Array.prototype.concat.call({ 0: 'a', 1: 'b', length: 2 }) // <- [{ 0: 'a', 1: 'b', length: 2 }]
ããã«ã.sliceã¡ãœããã䜿çšããå¥ã®äžè¬çãªæ¹æ³ã¯ãåŒæ°ãªã¹ãããè€æ°ã®ã¢ã€ãã ãåé€ããããšã§ãã
function format (text, bold) { if (bold) { text = '<b>' + text + '</b>' } var values = Array.prototype.slice.call(arguments, 2) values.forEach(function (value) { text = text.replace('%s', value) }) return text } format('some%sthing%s %s', true, 'some', 'other', 'things') // <- <b>somesomethingother things</b>
.spliceèŠçŽ ãåé€ããã³è¿œå ããããã®ãã匷åãªããŒã«
spliceïŒïŒã¡ãœããã¯ãæ¢åã®èŠçŽ ãåé€ããããæ°ããèŠçŽ ãè¿œå ãããããŠãé åã®å 容ãå€æŽããŸããæå®ãããæ¿å ¥èŠçŽ ã®æ°ãåé€ãããèŠçŽ ã®æ°ãšç°ãªãå Žåãé åã¯åŒã³åºãåŸã«é·ããå€æŽããŸãã.concatã.sliceãšã¯ç°ãªãããã®é¢æ°ã¯å ã®é åãå€æŽããããšã«æ³šæããŠãã ããã
var source = [1,2,3,8,8,8,8,8,9,10,11,12,13] var spliced = source.splice(3, 4, 4, 5, 6, 7) console.log(source) // <- [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 ,13] spliced // <- [8, 8, 8, 8]
åé€ãããã¢ã€ãã ãè¿ãããšãæ¢ã«èšåãããŠããå¯èœæ§ããããããã圹ç«ã€å ŽåããããŸãã
var source = [1,2,3,8,8,8,8,8,9,10,11,12,13] var spliced = source.splice(9) spliced.forEach(function (value) { console.log('removed', value) }) // <- removed 10 // <- removed 11 // <- removed 12 // <- removed 13 console.log(source) // <- [1, 2, 3, 8, 8, 8, 8, 8, 9]
.indexOfé åå ã®ã¢ã€ãã ãæ€çŽ¢ãã
indexOfïŒïŒã¡ãœããã¯ãå³å¯ãªæ¯èŒã䜿çšããŠãæ€çŽ¢ãããsearchElementãšé åå ã®èŠçŽ ãæ¯èŒããŸãïŒ===æŒç®åã§åãã¡ãœããã䜿çšãããããªãã«ã䜿çšãããŸãïŒã
var a = { foo: 'bar' } var b = [a, 2] console.log(b.indexOf(1)) // <- -1 console.log(b.indexOf({ foo: 'bar' })) // <- -1 console.log(b.indexOf(a)) // <- 0 console.log(b.indexOf(a, 1)) // <- -1 b.indexOf(2, 1) // <- 1 b.indexOf(2, a) // <- 1 b.indexOf(a, 2) // <- -1
inæŒç®åãæ¯æŽããã«ã¯
åå¿è ãã€ã³ã¿ãã¥ãŒã«å¯ŸããŠããããééãã¯ã.indexOfã¡ãœãããšinæŒç®åã®åãæäœã«é¢ããæ··ä¹±ããæèŠã§ãã
var a = [1, 2, 5] 1 in a // <- true // a[1], 2! 5 in a // <- false // a[5]
å®éãinæŒç®åã§ã¯ãªããžã§ã¯ãã®ããŒããã§ãã¯ããå€ã§æ€çŽ¢ããŸããããã®ãªãã·ã§ã³ã¯ã.indexOfã䜿çšããå Žåãããã¯ããã«é«éã«æ©èœããŸãã
var a = [3, 7, 6] 1 in a === !!a[1] // <- true
éé ã§ã®å埩ããŸãã¯.reverseã䜿çšããé åã®å転
ãã®ã¡ãœããã¯ãé åå ã®èŠçŽ ãååŸããããããéã®é åºã§é 眮ããŸãã
var a = [1, 1, 7, 8] a.reverse() // [8, 7, 1, 1]
èªãã«ã¯ïŒ
1. ã¢ã¬ã€
2. ã¢ã¬ã€vs. 察象
3. JavaScriptã§ã®é åã®ããã©ãŒãã³ã¹
4. é åã®é«éå
5. JavaScriptã§ã®ãªããžã§ã¯ã/é åã®ããã©ãŒãã³ã¹
6. ã¡ãœããã®åæ
7. é åããªããžã§ã¯ããããã³é¢æ°ãæäœããããã®è¿œå æ©èœãå®è£ ããã©ã€ãã©ãª
æ£èŠè¡šçŸ
æ£èŠè¡šçŸã¯ãæ£èŠè¡šçŸãªãã©ã«ã§ãã2ã€ã®ã¹ã©ãã·ã¥/ /ã䜿çšããŠäœæãããŸããå éšã§æ€çŽ¢ãã¿ãŒã³ãæå®ããŸããæ£èŠè¡šçŸãå€æ°ã«ä¿åããããã«ããŠãã ãããã³ãŒãã«çŽæ¥ïŒã€ã³ã©ã€ã³ã§ïŒåã蟌ãŸãªãã§ãã ãããããã«ãããèªã¿ããããå€§å¹ ã«åäžããŸãã
// if (/\d+/.test(text)) { // non-precompiled, but faster console.log('so many numbers!'); }
// var numeric = /\d+/; // precompiled if (numeric.test(text)) { console.log('so many numbers!'); }
ããã«ãæ£èŠè¡šçŸã®æžãæ¹ãåŠã³ãããããå¿ èŠãªçç±ãèŠã€ããããšãã§ããŸãããªã³ã©ã€ã³ã§èŠãããšã§èŠèŠåããããšãã§ããŸãã
èªãã«ã¯ïŒ
1. æ£èŠè¡šçŸ
2. RegExpã¯ã©ã¹
3. æååã®æ€çŽ¢ããã³çœ®æ ã¡ãœãã
4. RegExpããã³Stringã¡ãœãã
5. JavaScriptããªã³ã³ãã€ã«ãããæ£èŠè¡šçŸã®ããã©ãŒãã³ã¹
6. åºæ¬çãªæŠå¿µãšããã©ãŒãã³ã¹ã®åé¡
7. éåžžã®varazheniyamiã§äœæ¥ããããã®ã¿ã¹ã¯
éçºè ã³ã³ãœãŒã«
Webã¢ããªã±ãŒã·ã§ã³ã®ã¹ããŒã¿ã¹ã確èªããã«ã¯ãåŸã§éçšäžã«åé€ã§ããã³ã³ãœãŒã«ãªããžã§ã¯ãã䜿çšãããšéåžžã«äŸ¿å©ã§ãããã®æ©èœã¯æšæºã§ã¯ãªãããŸã æšæºåããäºå®ã¯ãããŸããããŸããå®è£ éã«å€§ããªéäºææ§ãããå Žåãããããã®åäœã¯å°æ¥å€æŽãããå¯èœæ§ããããŸãããããã£ãŠããµã€ãã§äœ¿çšããŠãã³ãŒããã€ã³ã¿ãŒãããã«æçš¿ããªãã§ãã ãããWebã¢ããªã±ãŒã·ã§ã³ããããã°ãããšãããã¹ãŠãåºåãã°ïŒconsole.logã«æžã蟌ãŸãªãããã«ããŠãã ããã
èªãã«ã¯ïŒ
1. åå¿è åãã®JavaScriptã®ãããã°
2. ã³ã³ãœãŒã«ã®äœ¿çš
3. åŒã³åºãã¹ã¿ãã¯ããã¬ãŒã¹
4. Chromeã®çå®ãWeb Inspector
5. Chromeã³ã³ãœãŒã«API
ã³ã¡ã³ã
ã³ã¡ã³ãã¯ãã³ãŒãã®æ©èœã説æããããšãç®çãšããŠããŸãããè¯ãã³ãŒãã¯ããèªäœãèªãã¹ãã§ããã³ãŒãã®äžéšãäœãããã®ãã説æãããå Žæã«ã³ã¡ã³ããæžãããšãèããŠããå Žåã¯ãããããã³ãŒãèªäœãå€æŽããå¿ èŠããããŸãããã®èŠåã®äŸå€ã¯ãæ£èŠè¡šçŸã®ãããªæ§ææ§æèŠçŽ ãããŒããããã³ãŒãã®è€éãªã»ã¯ã·ã§ã³ã®èª¬æã§ããè¯ãã³ã¡ã³ãã¯ãã³ãŒãã®äžéšããã®ããã«æ©èœããçç±ãšãã®ç¹å®ã®ç®çãäœã§ãããã説æããå¿ èŠããããŸãã
// // var p = $('<p/>'); p.center(div); p.text('foo');
// var container = $('<p/>'); var contents = 'foo'; container.center(parent); container.text(contents); megaphone.on('data', function (value) { container.text(value); // megaphone }); var numeric = /\d+/; if (numeric.test(text)) { console.log('so many numbers!'); }
ããŒãžã§ã³ç®¡çã·ã¹ãã ãããã®ã§ãã³ãŒãã®å·šå€§ãªãããã¯ã«ã€ããŠã³ã¡ã³ãããªãã§ãã ããïŒ
èªãã«ã¯ïŒ
1. è¶ å¯èªã³ãŒããæžãããã®16ã®ã³ã
2. ã³ãŒãã«ã³ã¡ã³ãããããã®ãã¹ããã©ã¯ãã£ã¹
3. é¢æ°ã«ã³ã¡ã³ããã
4. JavaScriptããã¥ã¡ã³ãã®ãžã§ãã¬ãŒã¿ãŒ
åœå
å€æ°ã«ã¯æå³ã®ããååãå¿ èŠã§ãããã®ã³ãŒãã®äžéšãç解ããããã«ãã³ã¡ã³ããããã¥ã¡ã³ããèªãããšã«é Œãå¿ èŠã¯ãããŸããã
// function a (x, y, z) { return (x+y+z) / 3; } a(1, 3, 5); // <- 3
// function average(a, b, c) { return (a + b + c) / 3; } average(1, 3, 5); // <- 3
èªãã«ã¯ïŒ
1. JavaScriptã¹ã¿ã€ã«ã¬ã€ããšã³ãŒãã£ã³ã°èŠå
ããªãã£ã«ã©ã€ãã©ãª
ãã€ãã£ãã®ãã©ãŠã¶ãŒæ©èœã䜿çšã§ããªãå Žåãã€ãŸããããã©ã«ãã§ã¯å®è£ ãããŠããªãå Žåã¯ãå€ããã©ãŠã¶ãŒã§ãããã®æ©èœããµããŒãããããã«å¿ èŠãªåäœããšãã¥ã¬ãŒãããããªãã£ã«ã©ã€ãã©ãªãå«ããŸãããã®çµæãã³ãŒããç°¡åã«æäœã§ããããã«ãªããŸãããå®å®æ§ãç¶æããããã«æ¡ä»¶ä»ãã®æ§é ãä»ã®æ§é ãéããå¿ èŠããªããªããŸããã
ããªãã£ã«ã©ã€ãã©ãªã®æ©èœãäžè¶³ããŠããå Žåã¯ããã®ãããªã©ã€ãã©ãªçšã®ãã©ã°ã€ã³ãäœæããããããªãã£ã«ã§ã©ããããããšã§æšæºæ©èœãšãªããžã§ã¯ãã®æ©èœãåçŽã«æ¡åŒµã§ããŸãã
èªãã«ã¯ïŒ
1. ææ°ã®DOMïŒããªãã£ã«
2. 10çš®é¡ã®æé«ã®ããªãã£ã«ã©ã€ãã©ãª
3. æ¢è£œã®ããªãã£ã«ã©ã€ãã©ãªã®ãªã¹ã
æ¯æ¥ã®ããªãã¯
1.è«çæŒç®å||ã䜿çšããŸã ããã©ã«ãå€ã決å®ããŸããæŒç®åã®å·ŠåŽã®å€ãfalseã®å ŽåãæŒç®åã®å³åŽã®å€ã䜿çšãããŸãïŒfalse || trueïŒãfalseã0ãnullããŸã㯠''ãªã©ã®å€ã®åŒ±ãåæ¯èŒã®ãããè«çæŒç®åã«é¢ããŠå³åŽã«æå®ããããã©ã«ãå€ã䜿çšãããããšã«æ³šæããŠãã ãããå³å¯ãªåãã§ãã¯ã«ã¯ã次ã®æ§æã䜿çšããŸããifïŒvalue === void 0ïŒ{value = defaultValue}
function a (value) { var defaultValue = 33; var used = value || defaultValue; }
2. é¢æ°ãéšåçã«äœ¿çšããã«ã¯ã.bindã¡ãœããã䜿çšã§ããŸã
function sum (a, b) { return a + b; } var addSeven = sum.bind(null, 7); addSeven(6); // <- 13
3. ãªããžã§ã¯ãããé åãååŸããå Žåã¯ãArray.prototype.slice.callã䜿çšããŸã
var args = Array.prototype.slice.call(arguments);
4. ããããããšã«ã€ãã³ããªã¹ããŒã䜿çšããŸãã
var emitter = contra.emitter(); // example, event emitters: jQuery, Angular, React .. body.addEventListener('click', function () { emitter.emit('click', e.target); }); emitter.on('click', function (elem) { console.log(elem); }); // emitter.emit('click', document.body);
5.空ã®é¢æ°ïŒno-opïŒãå¿ èŠãªå Žåã¯ãFunctionïŒïŒã䜿çšããŸã
function (cb) { setTimeout(cb || Function(), 2000); }
èªãã«ã¯ïŒ
1. browserhacks
2. 5人æ°ã®JavaScriptããã¯
3. æµè¡ã«ææãªããã€ãã®JavaScriptããã¯
4. ã€ãã³ãã®äœæãšåŒã³åºã
5. JavaScriptããžãã¯ïŒåŒæ°
ES6ã¬ã€ã
JavaScriptã¯ECMAïŒW3Cãªã©ïŒã«ãã£ãŠæšæºåãããŠããããã®æšæºã¯ECMAScriptãšåŒã°ããŠããŸããECMAScriptã¯æ¬¡ãå®çŸ©ããŸãã
- èšèªæ§æ-æ§æ解æã«ãŒã«ãããŒã¯ãŒããæŒç®åãåŒãªã©
- ã¿ã€ã-æ°åãæååããªããžã§ã¯ããªã©
- ãããã¿ã€ããšç¶æ¿
- çµã¿èŸŒã¿ã®ãªããžã§ã¯ããšé¢æ°ã®æšæºã©ã€ãã©ãª-JSONãMathãé åã¡ãœããããªããžã§ã¯ãã¡ãœãããªã©
2009幎ã«ãES5ã¯æ£åŒã«å®æãïŒ2011幎ã®ES5.1以éïŒãFirefoxãChromeãOperaãSafariãªã©ã®ãã©ãŠã¶ãŒã®åºç¯ãªæšæºã«ãªããŸããã次ã®ããŒãžã§ã³ã®JSïŒ2013幎ã2014幎ã2015幎ïŒãåŸ ã£ãŠããäžã§ãæãè°è«ãããæ°ãããã©ã³ãã¯ES6ã§ããã
ES6ã¯æ ¹æ¬çãªé²æ©ã§ããJSïŒES5ïŒãç¥ã£ãŠãããšæãããå Žåã§ããES6ã«ã¯ãŸã åŠç¿ããªããã°ãªããªãæ°ããããšããããããããŸããæºåãããªããïŒES6ã¯ãŸã£ããç°ãªããŸããããã¯ãé·å¹Žã«ããããã調æŽãããäœæ¥ã®çµæã§ãããããŠãããã¯æ°ããèšèªæ©èœã®å®ç©ã§ãããããŸã§ã§æãéèŠãªJSã¢ããããŒããæ°ããæ©èœã¯ãç¢å°é¢æ°ãç·è£éãªã©ã®åçŽãªæ©èœããããããã·ããžã§ãã¬ãŒã¿ãŒãªã©ã®è³ãççºãããæŠå¿µã«ãŸã§åã³ãŸãããä»ã§ã¯æ¢çŽ¢ãéå§ã§ããŸãïŒä»¥äžã®æç®ã®ãªã³ã¯ãåç §ïŒã
èªãã«ã¯ïŒ
1. ES6ã®ã¢ãã³ã¹ã¿ã€ã«ã¬ã€ã
2. ES6ã®ããŒãã·ãŒã
3. ES6 ã«ã€ããŠåŠã¶å¿ èŠããããã¹ãŠ
4. ES6ã®è©³çŽ°ïŒ ã¯ããã«
5. ES6以é
6. ECMAScriptã®äŸ6
7. ES6ã®350ã®åŽé¢