ç§ã¯.NETéçºè
ã§ãã ãããæè¿ãç§ã¯JavaScriptã«åºããããŸãã ããã«ãã±ãŒã¹ã®50ïŒ
ã§ãæ®ãã®50ä»¶ã§äœããæžããŠããŸã-ä»ã®èª°ãã®ã³ãŒããåŠçããããã«ãããã£ã±ãŒã·ã§ã³ãæã«ã¯é£èªåãééããŸããã ãã®èšäºã§ã¯ãèšèªãçè§£ãã广çã«äœæ¥ããããã«ç§ã«ãšã£ãŠéèŠã ãšæããããã€ã³ããå
±æãããã£ãã®ã§ãã ãã§ã«ãã®èšèªãæ±ã£ã人ã
ã«ãšã£ãŠæ°ãããã®ãæªç¥ã®ãã®ã¯ãªããä»ã®æ
å ±æºã§èŠã€ããããšãã§ããªããã®ã¯ãããŸããã ç§ã«ãšã£ãŠããã®èšäºã¯ãç§ã®ç¥èããªãã¬ãã·ã¥ããæ©äŒãšããŠãèªè
ã«ãšã£ãŠäž»é¡ãããããçè§£ããæ¹æ³ãšããŠåœ¹ç«ã€ã§ãããã
Brendan Ikeã¯ãJavaScriptã¯10æ¥éã§äœæããããšè¿°ã¹ãŸããã ãã®ã¢ã€ãã£ã¢ã¯ãã£ãšé·ããªã£ãŠãããšæããŸãã ãããããã§ãããããããªãããèšèªã¯å€æãããã以æ¥äººæ°ãç²åŸããŠããã ç¹ã«AJAXã®ç»å ŽåŸã
JavaScriptã¯ã匱ãåçãªæé»çãªåæå®ãèªåã¡ã¢ãªç®¡çãããã³ãããã¿ã€ãç¶æ¿ãåããèšèªã§ãã
JavaScriptã¯ã3ã€ã®ç°ãªãéšåã§æ§æãããŠããŸãã
- ã³ã¢ïŒECMAScriptïŒã
- ãã©ãŠã¶ãªããžã§ã¯ãã¢ãã«ãŸãã¯BOM
- ããã¥ã¡ã³ããªããžã§ã¯ãã¢ãã«ïŒããã¥ã¡ã³ããªããžã§ã¯ãã¢ãã«ãŸãã¯DOMïŒã
ãã®èšäºã§ã¯äž»ã«ã³ã¢ã«ã€ããŠèª¬æããŸãã ãã¡ãããã³ãŒãäŸã§ã¯DOMèŠçŽ ãšBOMèŠçŽ ã䜿çšãããŸããããããã«çŠç¹ãåãããããšã¯ããŸããã
åã·ã¹ãã
JavaScriptã¿ã€ãå³ã¯æ¬¡ã®ããã«ãªããŸãã
- æ°
- ã²ã
- ããŒã«å€
- 察象
- æ©èœ
- é
å
- æ¥ä»
- æ£èŠè¡šçŸ
- ãã«
- æªå®çŸ©
ããã-ãã®å³ã«ã¯å«ãŸããŠããªããšã©ãŒã®ã¿ã€ãããŸã ããããã
ãããã®ãã¡ã5ã€ã®ã¿ã€ããããªããã£ãã§ãã
- æ°
- ã²ã
- ããŒã«å€
- ãã«
- æªå®çŸ©
ãã以å€ã¯ãã¹ãŠãªããžã§ã¯ãã§ãã ããŒã«ãã¹ããªã³ã°ãããã³æ°å€ããªããã£ãã¯ã察å¿ãããªããžã§ã¯ãã«ã©ããã§ããŸãã ãã®å Žåããªããžã§ã¯ãã¯ããããããŒã«ãã¹ããªã³ã°ãããã³æ°å€ã³ã³ã¹ãã©ã¯ã¿ãŒã®ã€ã³ã¹ã¿ã³ã¹ã«ãªããŸãã
console.log('Holly Golightly' == new String('Holly Golightly'));
ããªããã£ãã«ã¯ããããã£ããããŸããã ããšãã°ãStringããªããã£ãã®lengthããããã£ã®å€ãååŸããããšãããšãããªããã£ãã¯ãªããžã§ã¯ãã«å€æãããããããã£ã¯ããããã£ã®å€ãååŸããåŸãã¬ããŒãžã³ã¬ã¯ã¿ãŒã®ã©ããã«ç§»åããŸãã
ããªããã£ãã¯ããããã£ã远å ã§ããŸããã
var person = 'Paul Varjak'; person.profession = 'writer'; console.log(person.profession);
ã©ããã åå§äººã¯ãªããžã§ã¯ãã«å€æãããããããã£ããªããžã§ã¯ãã«è¿œå ãããåŸãå¿åŽã«ãªããŸããã
æ°å
JavaScriptã®æ°å€ã¯ãæ°å€åã§è¡šãããŸããèšèªã§ã¯ãæŽæ°ãåºå®å°æ°ç¹æ°ãæµ®åå°æ°ç¹æ°ãžã®åå²ã¯ãããŸããã åæ°ã®æŒç®ã¯å¿
ãããæ£ç¢ºã§ã¯ãªãããšãå¿ããªãã§ãã ããã äŸãã°
console.log(0.1 + 0.2);
Numberåã®èšèªã«ã¯ãããã€ãã®ç¹å¥ãªæå³ããããŸãïŒ+ Infinityã-Infinityãããã³NaNã
console.log(Infinity === Infinity)
ãããŠä»ã泚æ
console.log(NaN === NaN);
NaNã¯ãŸã£ããçãããããŸããã NaNããã§ãã¯ããå ŽåãisNaN颿°ãèšèªã«çµã¿èŸŒãŸããŠããŸãã ãããããFinite颿°ããããŸãã NaNã¯äŒææ§ã§ããNaNã䜿çšããMathã®ç®è¡æŒç®ãŸãã¯é¢æ°ã®çµæãNaNã§ãã ãããã<<ã>>ã>>>ã||ã|ã^ãïŒã! ïŒç®è¡æŒç®ä»¥äžã®ãã®ããããŸãïŒNaNã¯ç Žå£ã§ããŸãã
console.log(NaN || 2);
parseInt颿°ã«ã¯æ³šæããå¿
èŠããããŸããå€ããã©ãŠã¶ãšæ°ãããã©ãŠã¶ã§ã¯ãæååãæåããåŠçãããšãã®åäœãç°ãªããŸãã ãããŠãåžžã«çªå·äœç³»ã瀺ãããšããå§ãããŸãã å€ããã©ãŠã¶ã¯ãå
é ã®ãŒãã8鲿°ã®èšå·ãšããŠèªèããŸãã
è¡
JavaScriptã®æååã¯ãUnicodeæåã®ã·ãŒã±ã³ã¹ã«ãããŸããã åäžã®æåã«åå¥ã®ã¿ã€ãã¯ãªãã代ããã«é·ã1ã®ã¹ããªã³ã°ã䜿çšãããŸãã
JavaScriptã®æååã¯äžå€ã§ãã ã€ãŸããäœæåŸã«è¡ã倿Žããããšã¯ã§ãããè¡ã«å¯Ÿãããã¹ãŠã®æäœã§æ°ãããªããžã§ã¯ããäœæãããŸãã 颿°ãžã®åŒæ°ãšããŠã®æååã¯ãå€ã§ã¯ãªãåç
§ã«ãã£ãŠæž¡ãããŸãã ãã ããåãè¡ãç°ãªãæ¹æ³ã§åŠçãããå Žåã§ããè¡ã¯äžå€ã§ãããããã³ãŒãã¯äºæž¬ã©ããã«åäœããŸãã
æåã®ãã©ã¡ãŒã¿ãæ£èŠè¡šçŸã§ã¯ãªãæååãåãåãå Žåãreplace颿°ã¯æååå
ã®æåã®éšåæååã®ã¿ã眮æããããšãå¿ããªãã§ãã ããã ããã«ãæ£èŠè¡šçŸã¯ã°ããŒãã«ã§ããå¿
èŠããããŸãïŒg修食åãå¿
èŠã§ãïŒã
var str = "This is the house that Jack built. This is the malt That lay in the house that Jack built. This is the rat, That ate the malt That lay in the house that Jack built".replace("Jack", "Captain Jack Sparrow"); console.log(str);
ãšããã§ãã³ãŒã«ããã¯é¢æ°ãæž¡ãããšãã§ããŸãã 以äžã®äŸã¯ãèªè»¢è»ã®éçºããããªããæãããšãã§ããŸãã
var callback = (function(i){ return function(a){ i++; return a + i; }; })(0); var str = "This is the house that Jack built. This is the malt That lay in the house that Jack built. This is the rat, That ate the malt That lay in the house that Jack built".replace(/Jack/g, callback); console.log(str);
æ£èŠè¡šçŸã¯ç¶æ
ãä¿åããtestã¡ãœãããšexecã¡ãœããã®çµæã¯åŒæ°ãšç¶æ
ã®äž¡æ¹ã«äŸåããããšãèŠããŠããããšãéèŠã§ãã 以äžã«ããã€ãã®äŸã瀺ããŸãïŒããããšãã
sekrasoft ïŒïŒ
/a/g.test('aa')
ããªã«æååã¯ãlocaleCompare颿°ãšæãããæ¯èŒãããŸãã
"" > ""
ææå°æ©ã®æé©åã¯æªã§ãã æ¬¡ã«äŸã瀺ããŸãã
jsperf.com/array-join-vs-connect
2çªç®ã®ãªãã·ã§ã³ã¯ãããã©ãŒãã³ã¹ã§åã¡ãŸãã
jsperf.com/heera-string-literal-vs-object
ãã®å Žåãæåã®ãªãã·ã§ã³ã倧ããªããŒãžã³ã§åã¡ãŸãã å®éããã©ãŠã¶ãšã³ãžã³ã«ã¯ããã®ãããªãã³ãã¬ãŒãã®æé©åãæ¢ã«çµ±åãããŠããŸãã
äºéåŒçšç¬ŠãšåäžåŒçšç¬Šã®äž¡æ¹ã䜿çšããŠãæååãæ§æã§ããŸãã JSONã¯äºéåŒçšç¬Šã§ã®ã¿æå¹ã§ãã æ®ãã¯ããããžã§ã¯ãã§æ¡çšãããŠããã¹ã¿ã€ã«ã«åŸãããšã§ãã
nullããã³æªå®çŸ©
nullããã³undefinedã¯ã察å¿ãããªããžã§ã¯ããæããªãããªããã£ãã§ãã ãããã£ãŠãæååãæ°å€ãããŒã«å€ãšã¯ç°ãªãããããã®ããªããã£ãã®1ã€ã«ããããã£ã远å ããããšããããããããã£å€ãååŸããããšãããšãTypeErrorãçºçããŸãã
æå³çã«nullãšundefinedã¯äŒŒãŠããŸãããéãããããŸãã nullã¯ãªããžã§ã¯ãããªãããšãæå³ããundefinedã¯ãã®ãããªå€ããªãããšãæå³ããŸãã nullã¯ããŒã¯ãŒããundefinedã¯ã°ããŒãã«ã³ã³ããã¹ãããããã£ã§ãã 確ãã«ãææ°ã®ãã©ãŠã¶ã§ã¯ãç°ãªãå€ãå²ãåœãŠãŠãæ©èœããŸããã æªå²ãåœãŠã®å€æ°ã¯ããã©ã«ãã§æªå®çŸ©ã«ãªããŸãã
ãªããžã§ã¯ã
JavaScriptã®ãªããžã§ã¯ãã¯é£æ³é
åã§ãã
空ã®ãªããžã§ã¯ãã¯ããã€ãã®æ¹æ³ã§äœæã§ããŸãã
var obj = {}; var obj1 = new Object(); var obj2 = Object.create(null);
æåã®ã¡ãœããã¯ãªãã©ã«ãšåŒã°ãã䜿çšããããšããå§ãããŸãã
ã³ã³ã¹ãã©ã¯ã¿ãŒé¢æ°ã䜿çšããŠãªããžã§ã¯ããäœæããããšãã§ããŸãã
function Company(name, address){ this.name = name; this.address = address; } var company = new Company('Sing-Sing', 'Ossining, Westchester County, New York, United States');
äœæããããªããžã§ã¯ãã®ããããã£ã«ã¢ã¯ã»ã¹ããã«ã¯ãäž»ã«2ã€ã®æ¹æ³ããããŸãã
obj.name = 'Tiffany' var name = obj.name;
ãããŠ
obj['name'] = 'Tiffany'; var name = obj['name'];
JavaScriptãªããžã§ã¯ãã®ããŒã¯åžžã«æååã§ãããããä»»æã®ããŒãæã€èŸæžãšããŠäœ¿çšããããšã¯ã§ããŸããã ããŒãšããŠæåå以å€ã䜿çšããããšãããšã䜿çšãããå€ãæååã«ãã£ã¹ããããŸãã
var obj = {}; obj[1] = 1; obj[null] = 2; obj[{}] = 3; obj[{a: 1}] = 4; var val = obj[{}]
{}ãš{aïŒ1}ãåãå€-"[object Object]"ã«ãã£ã¹ããããæ°å€ãšnullã察å¿ããè¡ã«å€æãããããšãããããŸãã
ãã®èšèªã«ã¯ãã²ãã¿ãŒãšã»ãã¿ãŒã䜿çšããŠããããã£ãäœæããæ©èœããããŸãã ãããè¡ãã«ã¯ããã€ãã®æ¹æ³ããããŸãã
ãªãã©ã«ïŒ
var consts = { get pi(){ return 3.141592; }, set pi(){ throw new Error('Property is read only'); } };
Object.defineProperty颿°ã®äœ¿çšïŒ
var consts = {}; Object.defineProperty(consts, 'pi', { get : function () { return 3.14159265359; }, set: function(){ throw new Error('Property is read only'); } });
Object.defineProperties颿°ã䜿çšããïŒ
var consts = {}; Object.defineProperties(consts, {'pi': { get : function () { return 3.14159265359; }, set: function(){ throw new Error('Property is read only'); }}, 'e': { get : function () { return 2.71828182846; }, set: function(){ throw new Error('Property is read only'); } }});
æ©èœ
JavaScriptã§ã¯ã颿°ã¯çµã¿èŸŒã¿ã®Functionã¯ã©ã¹ã®ãªããžã§ã¯ãã§ãã ãããã¯å€æ°ã«å²ãåœãŠããã颿°ã«ãã©ã¡ãŒã¿ãŒãšããŠæž¡ããã颿°ã®çµæãšããŠè¿ããããããã®ããããã£ã«ã¢ã¯ã»ã¹ã§ããŸãã
颿°ã®ååã¯æ¬¡ã®ãšããã§ãã
function getAnswer(){ return 42; }
ããã³å¿åïŒ
var getAnswer = function(){ return 42; }
颿°ã«ã¯ã奜ããªã ããã©ã¡ãŒã¿ãŒãæž¡ãããšãã§ããŸãã ãããã¯ãã¹ãŠãåŒæ°ãªããžã§ã¯ããä»ããŠå©çšã§ããŸãã ããã«ããã®ãªããžã§ã¯ãã«ã¯ãé·ãããããã£ïŒåŒæ°ãšåŒã³åºãå
ã®æ°ïŒã颿°èªäœãžã®ãªã³ã¯ããããŸãã
function toArray(){ return Array.prototype.slice.call(arguments); } toArray(1, 2, 3, 6, 'Tiffany');
颿°èªäœãžã®ãªã³ã¯ã«ãããååž°çãªå¿å颿°ãäœæã§ããŸãã
var fibonacci = function(n){ if (n <= 1){ return n; } else { return arguments.callee(n - 2) + arguments.callee(n - 1); } } console.log(fibonacci(22));
æšæºã®ææ°çã§ã¯ããã®ããããã£ã¯åé€ãããŸããã ããããæ¬¡ã®ããã«æžãããšãã§ããŸãïŒ
var fibonacci = function f(n){ if (n <= 1){ return n; } else { return f(n - 2) + f(n - 1); } } console.log(fibonacci(22));
JavaScriptã§varãä»ããŠå®£èšããã倿°ã®ã¹ã³ãŒãã¯ã颿°ã«ãã£ãŠå¶éãããŸãã letããŒã¯ãŒãã¯æºåäžã§ããããããã¯ã¹ã³ãŒããèšå®ããŸããããã©ãŠã¶ãŒã¯ãã¶ãã¶ãµããŒãããŸãã
ããããã ããã¯ãèªå·±å®è¡é¢æ°ãŸãã¯ããã«åŒã³åºããã颿°åŒãšåŒã°ããŸãã
(function(){ var person = new Person();
ããã¯è¯ãç¿æ
£ã ãšæããŸãã ãããã£ãŠãäžå¿
èŠãªå€æ°ã§ã°ããŒãã«ã¹ã³ãŒããè©°ãŸãããªãããšãããããŸãã
ãã®ããŒã¯ãŒã
JavaScriptã§ã®ãã®å€ã¯ã颿°ãäœæããããªããžã§ã¯ãã«äŸåããŸããã é話äžã«æ±ºå®ãããŸãã
ã°ããŒãã«ãªã³ã³ããã¹ãã§ïŒ
console.log(this);
ãªããžã§ã¯ãã®ããããã£ãšããŠïŒ
var obj= { data: 'Lula Mae' }; function myFun() { console.log(this); } obj.myMethod = myFun; obj.myMethod();
éåžžã®é¢æ°ã®ããã«ïŒ
var obj = { myMethod : function () { console.log(this); } }; var myFun = obj.myMethod; myFun();
evalã«ããå®è¡ïŒevalã䜿çšããªãã§ãã ããïŒïŒ
function myFun() { console.log(this); } var obj = { myMethod : function () { eval("myFun()"); } }; obj.myMethod();
ã¡ãœããã®åŒã³åºããŸãã¯é©çšïŒ
function myFunc() { console.log(this); } var obj = { someData: "a string" }; myFunc.call(obj);
ã³ã³ã¹ãã©ã¯ã¿ãŒå
ïŒ
var Person = function(name){ this.name = name; console.log(this); } var person = new Person('Lula Mae');
ãšããã§ãã³ã³ã¹ãã©ã¯ã¿ãŒé¢æ°ã¯é垞倧æåã§è¡šèšãããŸãã
ããã«æè¿ã§ã¯ã颿°ãã³ã³ããã¹ãã«ãã€ã³ãããbindã¡ãœãããç»å ŽããŸããã ããæ£ç¢ºã«ã¯ã颿°ãã³ã³ããã¹ãã«ãã€ã³ãããã ãã§ãªããcallããã³applyãšã¯ç°ãªããæå®ãããã³ã³ããã¹ãã§æ°ãã颿°ãäœæããŸãã
var myFunc = function() { console.log(this); }.bind(999); myFunc();
ç絡
JavaScriptã¯ããã¹ãããã颿°ãå€éšé¢æ°ã®å€æ°ã«ã¢ã¯ã»ã¹ã§ããããã«èšèšãããŠããŸãã ãããééã§ãã
ãžã£ãã¯ã®äŸã«æ»ããŸãããã
var callback = (function(i){ return function(a){ i++; return a + i; }; })(0); var str = 'Jack Jack Jack'.replace(/Jack/g, callback); console.log(str);
åŒæ°aããšã颿°ãå€éšé¢æ°ã®å€æ°ã«ã¢ã¯ã»ã¹ããããšããããŸããã ãããŠãå
éšé¢æ°ãåŒã³åºããã³ã«ãã«ãŠã³ã¿ãŒå€æ°iã1å¢ãããŸãã
ããç°¡åãªäŸïŒ
function add(a) { var f = function(b) { return a+b; }; return f; } console.log(add(5)(7));
äœãèµ·ãã£ãã®ãèŠãŠã¿ãŸãããã
颿°ãåŒã³åºããããšããã®ã³ã³ããã¹ããäœæãããŸãã 颿°ã®å倿°ããã®ååãæã€ããããã£ã«å¯Ÿå¿ãããªããžã§ã¯ãã§ãããšèãããšäŸ¿å©ã§ãã ãŸãããã¹ãããã颿°ãåŒã³åºããšãå€éšé¢æ°ã®ã³ã³ããã¹ããžã®ãªã³ã¯ãååŸããã倿°ã«ã¢ã¯ã»ã¹ãããšã颿°ã®ã³ã³ããã¹ãã§æ€çŽ¢ãå®è¡ããããã®åŸãå€éšé¢æ°ã®ã³ã³ããã¹ãã§æ€çŽ¢ãå®è¡ãããŸãã
ã³ãŒã«ã¢ãïŒ5ïŒ
- [[scope]] = {aïŒ5}ã«ãã£ãŠçæ
- 颿°f = functionïŒbïŒ{a + bãè¿ã; }
- f颿°ã¯[[scope]]ãžã®åç
§ãååŸããŸã
- 颿°fãžã®åç
§ã[[scope]]ã«è¿œå ãããŸã
- 颿°fãžã®åç
§ãè¿ããŸã
ã³ãŒã«ã¢ãïŒ5ïŒïŒ7ïŒ
- [[scope2]] = {bïŒ7}ã«ãã£ãŠçæ
- ããããã£ã¯[[scope2]]ãªããžã§ã¯ãã§æ€çŽ¢ãããŸãã èŠã€ãããŸããã
- ããããã£ã¯[[scope]]ãªããžã§ã¯ãã§æ€çŽ¢ãããŸãã èŠã€ãã£ããå€ã¯5ã§ãã
- ãªããžã§ã¯ã[[scope2]]ã®ããããã£bãæ€çŽ¢ããŸãã èŠã€ãã£ããå€ã¯7ã§ãã
- 5ãš7ãŸã§è¿œå ããŸãã
- å ç®ã®çµæ-æ°å€12ãè¿ãããŸãã
ãã©ã¡ãŒã¿ãæž¡ã
function myFunc(a, b){ console.log('myFunc begins'); console.log('myFunc ' + a); console.log('myFunc ' + b); } function getArgument(arg){ console.log('getArgument ' + arg); return arg; } myFunc(getArgument(5), getArgument(7));
ããã§äœïŒ 第äžã«ãåŒæ°ã颿°ã«æž¡ãããåã«èšç®ãããããšã¯æããã§ããããã¯ããã©ã¡ãŒã¿ãŒãåŠçããããã®ããããå³å¯ãªæŠç¥ã§ã... ãã®åäœã¯æšæºã§å®çŸ©ãããŠãããå®è£
ã«äŸåããŸããã
å€ã¯åç
§æž¡ããŸãã¯å€æž¡ããããŸããïŒ æååãé€ãããªããã£ãã¯ãå€ã«ãã£ãŠæž¡ãããŸãã æååã¯åç
§ã«ãã£ãŠæž¡ãããå€ã«ãã£ãŠæ¯èŒãããŸãã æååã¯äžå€ãªã®ã§ãããã¯ã¡ã¢ãªãç¯çŽããå¯äœçšããããŸããã ãªããžã§ã¯ãã¯åç
§æž¡ããããŸãã 颿°ãžã®åç
§ã«ãã£ãŠåŒæ°ãæž¡ãåã«ããªã³ã¯ã®ã³ããŒãäœæãããåŒã³åºããã颿°å
ã«ã®ã¿ååšããããšã«æ³šæããŠãã ããã ã€ãŸããèšãæãããšããªããžã§ã¯ãã¯åç
§å€ã«ãã£ãŠæž¡ãããŸãã äŸãèŠãŠã¿ãŸãããïŒ
var a = { data: 'foo' }; var b = { data: 'bar' }; function change(arg){ arg.data = 'data'; } function swap(x, y){ var tmp = x; x = y; y = tmp; } change(a); swap(a, b); console.log(a);
ãªããžã§ã¯ãã®ããããã£ã倿Žã§ããããšãããããŸãã-ãªã³ã¯ã®ã³ããŒã¯åããªããžã§ã¯ããåç
§ããŠããŸãã ãŸãããªã³ã¯ã«æ°ããå€ãå²ãåœãŠããšãå
ã®ãªã³ã¯ã§ã¯ãªãã颿°ã«æž¡ãããã³ããŒã«ã®ã¿åœ±é¿ããŸãã
å¯å€ããã«ãšåå解決
ãã®ãããªã³ãŒããèŠãŠã¿ãŸãããã
var a = 1; function b(){ console.log(a); if (false){ var a = 2; } } b();
ãªã1ã§ã¯ãªãã®ã§ããïŒ å®éã«ã¯ãvarãä»ããŠå®£èšããã倿°ã®å Žåãã¹ã³ãŒãã¯é¢æ°ã«ãã£ãŠå¶éããã倿°ãæµ®åãããã¡ã«ããºã ããããŸãã èšèªã€ã³ã¿ãŒããªã¿ãŒã¯ãåžžã«ã¹ã³ãŒãã®å
é ã«ãããã¹ãŠã®å€æ°ã®å®£èšãä¿æããŸãã ãã®å Žåãã¢ããŠã³ã¹ã®ã¿ã転éãããå€ã®å²ãåœãŠã¯è»¢éãããŸããã äžèšã®ã³ãŒãã¯æ¬¡ãšåçã§ãïŒ
var a = 1; function b(){ var a; console.log(a); if (false){ a = 2; } } b();
ååã§ãªããžã§ã¯ããèŠã€ããããã®ã¢ã«ãŽãªãºã ã¯æ¬¡ã®ãšããã§ãã
- èšèªã®äºåå®çŸ©å€æ°ãæ€çŽ¢ããŸãã èŠã€ãã£ãå Žåã¯ãããã䜿çšããŸãã
- æ£åŒãªé¢æ°ãã©ã¡ãŒã¿ãŒãæ€çŽ¢ããŸãã èŠã€ãã£ãå Žåã¯ãããã䜿çšããŸãã
- 宣èšããã颿°ã®äžããçŸåšã®ã¹ã³ãŒããæ€çŽ¢ããŸãã èŠã€ãã£ãå Žåã¯ãããã䜿çšããŸãã
- 宣èšããã倿°ã®äžããçŸåšã®ã¹ã³ãŒããæ€çŽ¢ããŸãã èŠã€ãã£ãå Žåã¯ãããã䜿çšããŸãã
- äžèšã®ã¹ã³ãŒãã«ç§»åããŠãæåããããçŽããŠãã ããã
äŸå€ã¯ããããã®äŸå€ãæå®ãããŠããªãäžè¬çãªã«ãŒã«ã®ååšã確èªããŸãã arguments倿°ã¯ããŸãã«ãã®ãããªäŸå€ã§ãã ããã¯èšèªã§äºåå®çŸ©ããã倿°ã§ãããå€ãæ€çŽ¢ããå Žåã¯ä»®åŒæ°ãã©ã¡ãŒã¿ãŒãåªå
ãããŸãã
function a(){ console.log(arguments); } function b(arguments){ console.log(arguments); } a();
ç¶æ¿
JavaãCïŒãC ++ãªã©ã®èšèªãšã¯ç°ãªãããªããžã§ã¯ãã¯JavaScriptã«ç¶æ¿ãããŸããã ãã ããã¯ã©ã¹ã¯äºçŽèªã§ããããããã®ãããªå€æ°ã«ååãä»ããããšã¯ã§ããŸããã
åãªããžã§ã¯ãã«ã¯ããããã¿ã€ããšåŒã°ããå¥ã®ãªããžã§ã¯ããžã®ãªã³ã¯ãå«ãŸããŠããŸãã ãããã¿ã€ãã«ã¯ããããã¿ã€ããžã®ãªã³ã¯ãªã©ãå«ãŸããŠããŸãã ããæç¹ã§ãnullãããã¿ã€ããæã€ãªããžã§ã¯ããç¹å®ããããã§ãŒã³ãçµäºããŸãã
ãããã¿ã€ãç¶æ¿ã¢ãã«ã¯ãã¯ã©ã¹ããŒã¹ã®ç¶æ¿ããã匷åã§ãããšèããããŠããŸãã ãã®åœé¡ãæ¯æããŠã次ã®è°è«ããããŸããã¯ã©ã¹ã®ç¶æ¿ã¯ããããã¿ã€ãã®äžã«ããªãç°¡åã«å®è£
ãããŸãããå察ã«-ãããã
JavaScriptã®ãªããžã§ã¯ãã¯ãåã«é¢é£æ§ã®ããããããã£ãã£ã¯ã·ã§ããªã§ããããšã¯æ¢ã«è¿°ã¹ãŸããã ããã§ãé衚瀺ã®ããããã£ããŸã ããããšãããããŸããããã¯[[Prototype]]ã§ãããã³ãŒãã§ã¯äœ¿çšã§ãããããããã£ã®ãäºçŽããœãŒã¹ãšããŠæ©èœããŸãã ãã®å Žåã®ããããã£æ€çŽ¢ã®æ§åãèŠãŠã¿ãŸãããã
ãããã¿ã€ããã§ãŒã³ãäœæããŸããã
{aïŒ1ãbïŒ2} ---> {bïŒ3ãcïŒ4} ---> null
console.log(oa);
ãªããžã§ã¯ãã«ã¯ç¬èªã®ããããã£aããããããå€ãååŸããŸãã
console.log(ob);
ãªããžã§ã¯ãã«ã¯ç¬èªã®ããããã£bããããããå€ãååŸããŸãã ãããã¿ã€ãã«ããã®ãããªããããã£ããããŸããããã¹ãããŠããŸããã ããã¯ãããããã£ã®éè€ãšåŒã°ããŸãã
console.log(oc);
ãªããžã§ã¯ãã«ã¯ããããã£cããããŸããã ããããããã¯ãããã¿ã€ãã«ããããããã¿ã€ãã®ããããã£ã䜿çšããŸãã
console.log(od);
ãªããžã§ã¯ãã«dããããã£ã¯ãããŸããã 詊äœåãæ¢ããŠããŸããã詊äœåããããŸããã ãããã¿ã€ãã®ãããã¿ã€ãã§æ€çŽ¢ãç¶ããŸãããããã¯ãã«ã§ãã æ€çŽ¢ã忢ããããããã£ãèŠã€ãããŸããã§ãããæªå®çŸ©ãè¿ããŸãã
ã¡ãœããã§ã¯ããã¹ãŠããŸã£ããåãããã«èµ·ãããŸãã ããã§ããã¡ãœããã¯ãªããžã§ã¯ãã®ããããã£ã§ããããŸãã 1ã€ã®æ³šæç¹-颿°å
ã®thisããŒã¯ãŒãã¯ã颿°ããããã¿ã€ãã§èŠã€ãã£ãå Žåã§ãããããã¿ã€ãã§ã¯ãªããªããžã§ã¯ããæããŸãã ååãšããŠãããã¯è«ççã§ãã
ãããã¿ã€ãããªããžã§ã¯ãã«å²ãåœãŠãæ¹æ³ã¯ïŒ ããã€ãã®æ¹æ³ããããŸãã
ãŸãããªããžã§ã¯ããé
åã颿°ãäœæãããšãã«ãããã¿ã€ããèªåçã«å²ãåœãŠãããŸãã
var o = {a: 1};
次ã«ãã³ã³ã¹ãã©ã¯ã¿ãŒãä»ããŠãªããžã§ã¯ããäœæãããšãã«ãããã¿ã€ããå²ãåœãŠãããšãã§ããŸãã ãã®å Žåããªããžã§ã¯ãã®ãããã¿ã€ããã³ã³ã¹ãã©ã¯ã¿ãŒã®ãããã¿ã€ãã«ãªããŸãã
function Animal(){ this.eat = function(){ console.log('eat called'); }; } function Cat(name){ this.name = name; }; Cat.prototype = new Animal(); var cat = new Cat('No name cat'); cat.eat();
[[Prototype]]ããããã£ã¯ãæ°ããcatïŒïŒãå®è¡ããããšCat.prototypeã«èšå®ãããŸãã ãã ããcatãªããžã§ã¯ãã®constructorããããã£ã«ã¯å€Animalãå²ãåœãŠãããŸããã ã³ã³ã¹ãã©ã¯ã¿ãŒãæ£ãããŸãŸã«ãªãããã«ã³ãŒããä¿®æ£ã§ããŸãã è¡Cat.prototype.constructor = Cat;ã远å ããŸãã
function Animal(){ this.eat = function(){ console.log('eat called'); }; } function Cat(name){ this.name = name; }; Cat.prototype = new Animal(); Cat.prototype.constructor = Cat; var cat = new Cat('No name cat'); cat.eat();
第äžã«ãObject.createã¡ãœããã䜿çšããŠãªããžã§ã¯ããäœæãããšãã«ããããã¿ã€ããå²ãåœãŠãããšãã§ããŸãã ãããã¿ã€ãã¯ããã®ã¡ãœããã®æåã®åŒæ°ã«ç€ºãããŠããŸãã
var a = {a: 1};
ãããã¿ã€ããå²ãåœãŠãããšã¯ã§ããŸããã ãããã¿ã€ãã¯ããªããžã§ã¯ãã§ã¯ãªããã³ã³ã¹ãã©ã¯ã¿ãŒã®ããããã£ã§ãã
var o = { a: 1 }; o.prototype = { b: 2 }; console.log(ob);
ãã ããObjectãªã©ã®çµã¿èŸŒã¿åã®ãããã¿ã€ãã¯å€æŽã§ããŸãã ããã¯æªãç¿æ
£ã§ãã çµã¿èŸŒã¿ãããã¿ã€ãã倿Žããå Žåã«åãå
¥ããããå¯äžã®ã±ãŒã¹ã¯ãèšèªã®æ°ããããŒãžã§ã³ã®æ©èœã®ãšãã¥ã¬ãŒã·ã§ã³ã®ã¿ã§ãã
峿 Œã¢ãŒã
ãã®ã¢ãŒãã¯ãã£ã¬ã¯ãã£ãã«ãã£ãŠæå¹ã«ãªããŸã
'use strict';
ãã®ãã£ã¬ã¯ãã£ãã¯ãã³ãŒããECMAScript 5æšæºã«åŸã£ãŠå®è¡ãããããšãæå³ããŸãã ããããããè«ççã§æ£ç¢ºã§ããã以åãšåãã§ã¯ãããŸããã ãã®ãã£ã¬ã¯ãã£ãã¯ãã¹ã¯ãªããå
šäœãŸãã¯ãã¹ãããã颿°ãå«ãåäžã®é¢æ°ã«é©çšã§ããŸãã å
¥ãåãšã¯ã颿°å
ã§å®£èšããã颿°ãæããŸãã 颿°ãä»ã®å Žæã§å®£èšããããstrictã颿°å
ã§ã®ã¿å®è¡ãããå Žåããã£ã¬ã¯ãã£ãã¯æ©èœããŸããã ããã¯äŸã«ã¯ã£ãããšèŠãããŸãã
function a(){ console.log(arguments.callee); } (function() { "use strict"; function b(){ console.log(arguments.callee); } a();
ãããŠããã®äŸããã©ãŠã¶ã³ã³ãœãŒã«ã§æ©èœããããã«ãèªå·±åŒã³åºãæ©èœãããã«ãããŸãã ã³ã³ãœãŒã«ã§ãå³å¯ã«äœ¿çšãã¯æ©èœå€ã§ã¯æ©èœããŸããã
äœãå€ããã®ã§ããããïŒ ãŸããæ¢ã«è¿°ã¹ãããã«ãarguments.calleeããããã£ã¯äœ¿çšã§ããªããªããŸãã
第äºã«ãããã¯ãnullãŸãã¯æªå®çŸ©ã®å Žåã¯ã°ããŒãã«ãªããžã§ã¯ãã«çœ®ãæããããŸããããŸããããªããã£ãã®å Žåã¯ã³ã³ã¹ãã©ã¯ã¿ãŒã€ã³ã¹ã¿ã³ã¹ã«ã©ãããããŸãã
(function() { "use strict"; var a = function(){ console.log(this); }.bind(null) a();
第äžã«ãæç€ºçã«å®£èšããã«ã°ããŒãã«å€æ°ãäœæããããšã¯ã§ããŸããã
(function() { "use strict"; a = 0;
4çªç®ã«ãwithïŒobjïŒ{}ã³ã³ã¹ãã©ã¯ãã¯ãµããŒããããªããªããŸãã
第5ã«ãåãããŒã䜿çšããŠãªããžã§ã¯ããäœæããããšã¯ã§ããŸããã
(function() { "use strict"; var o = { p: 1, p: 2 };
ããã ãã§ã¯ãããŸãããããã¹ãŠããªã¹ãããããã§ã¯ãããŸããã
ãã©ã€ããŒãããã³ãããªãã¯
ãã®èšèªã«ã¯ãã©ã€ããŒãããŒã¯ãŒããšãããªãã¯ããŒã¯ãŒãã¯ãããŸãããããã©ã€ããŒãããŒã¿ãšãããªãã¯ããŒã¿ãåé¢ã§ããŸãã 仿¥ã®ããã€ãã®æ¹æ³ãããšãã°ã¢ãžã¥ãŒã«ãã¿ãŒã³ããããŸãã
blackBox = (function(){ var items = ['table', 'horse', 'pen', 48]; return { pop: function(){ return items[~~(Math.random() * items.length)]; } }; })(); console.log(blackBox.pop());
ãŸãã¯ããããè¡ãããšãã§ããŸãïŒ
function BlackBox(){ var items = ['table', 'horse', 'pen', 48]; this.pop = function(){ return items[~~(Math.random() * items.length)]; }; } var blackBox = new BlackBox(); console.log(blackBox.pop());
ãããã°
ãããã¬ãŒã¹ããŒãã¡ã³ãã¯ããããã¬ãŒãåŒã³åºããŸãïŒäœ¿çšå¯èœãªå ŽåïŒã ãã®å Žåãã¹ã¯ãªããã®å®è¡ã¯ãã®åœä»€ã®ããè¡ã§åæ¢ããŸãã
ããšãã°ããããã¢ããã¡ãã»ãŒãžã®éä¿¡å
ãç¹å®ããå¿
èŠãããå Žåãã³ã³ãœãŒã«ã§å®è¡ã§ããŸãã
window.alert = function(){ debugger; };
ããã§ãã¡ãã»ãŒãžã®ä»£ããã«ããããã¬ãŒãèµ·åããã¢ã©ãŒãåŒã³åºãã®å Žæã§ã¹ã¯ãªããã忢ããŸãã
颿°ã®åŒã³åºãã¹ã¿ãã¯ãèšé²ãããšäŸ¿å©ãªå ŽåããããŸãã æ¬¡ã®æ¹æ³ã§å®è¡ã§ããŸãã
function a(){ console.log(new Error().stack); } function b(){ a(); } function c(){ b(); } c();