ã²ãã³ãã«ãããã°ã©ãã®ããã®JavaScriptããããã ã¯ç©ºãã¾ããããäºå®ã©ããã¹ã³ã¼ãã³ã°ã話é¡ã«ãã¾ããJavaScriptã«ã¯âå¤ãªã¨ããâãããã¤ãããã¾ããããã®ãªãã§ããã¹ã³ã¼ãã³ã°ã¯ãã£ã¨ãæ··ä¹±ã¨å¼å®³ãã¾ããã¨ããã§ã¯ãªãã§ããããããããèªãã°ãééããã¨ãæ©ããã¨ããªããªãã¾ããã
[追è¨]åã®èª¤èªã¨åéããã³ã¡ã³ãã§ãææããã ãã¾ããããã¤ãããããã¨ããããã¾ãããææãæ¬æã«åæ ãã¾ããã夿´é¨åã¯åæ¶ç·ã使ã£ã¦ä¿®æ£ãã¾ãã¯ã追è¨ãã¨æç¤ºãã¦ããã¾ãããã ããã¤ãã§ã«è¡¨ç¾ãç´ããé¨åã¾ã§ã¯æç¤ºãã¦ã¾ããã[/追è¨]
ä»åã®å 容ï¼
- JavaScriptã«ãããå®£è¨æ
- undefinedå¤
- varæã¯ãã®ããã«åã
- é©ãã¹ãç¾è±¡
- çä¼¼ãããã¯ã¨å°æ¥ã®ä»æ§å¤æ´
- ä»åã®ã¾ã¨ã
âJavaScriptã«ãããå®£è¨æ
ããã°ã©ã ã¯æï¼è¤åæãå«ãï¼ã®ä¸¦ã³ã§ããå¤ãã®ããã°ã©ãã³ã°è¨èªã§ã¯ãå®£è¨æã¨å®è¡æã®åºå¥ããããå®£è¨æã¯ã³ã³ãã¤ã©ã«æ å ±ãä¸ããããã³ã³ãã¤ã«åä½ãæç¤ºããããã¾ããJavaScriptãã³ã³ãã¤ã«ã»ãã§ã¼ãºãããï¼ç¬¬5åãã³ã³ãã¤ã«åä½ããåç §ï¼ã®ã§ãå®£è¨æãããã¾ããfunctionæã¨varæãå®£è¨æã ã¨ãã£ã¦ããã§ãããã
functionæã¯ã颿°å®ç¾©æ¬ä½ãã³ã³ãã¤ã«ããã³ã¼ãï¼ãæã¤é¢æ°ãªãã¸ã§ã¯ãï¼ã大åãªãã¸ã§ã¯ãã®ããããã£ï¼ãã®ååã¯é¢æ°åï¼ã¨ãã¦ã»ãããããã¨ãã³ã³ãã¤ã©ã«æç¤ºãã¾ãããã£ã¦ãå®è¡æã«ã¯ãæåãã大å颿°ã¯ä½¿ããç¶æ ã«ãªã£ã¦ãã¾ãããã®ãã¨ãããfunctionæã¯ã確ãã«å®£è¨æã¨å¼ã¶ã«ãµãããããã®ã§ãã
ã§ã¯ãvaræã¯ã©ãã§ãããã夿°å®£è¨æã¨å¼ã¶ã«ãµããããã§ãããããæ¬¡ã®ããã°ã©ã ï¼ã³ã³ãã¤ã«åä½ï¼ãå®è¡ãã¦ã¿ã¦ãã ããã
if (typeof f != 'undefined') alert("function 'f' is defined.");
if (typeof x != 'undefined') alert("variable 'x' is defined.");
if (typeof y != 'undefined') alert("variable 'y' is defined.");function f() {}
var x = "hello";
var y;
ããã°ã©ã ã®å ¥ãå£ã§é¢æ°fã¯æ¢ã«åå¨ãã¾ããã夿°x, yã¯åå¨ããªãï¼undefinedãªï¼ããã§ãããã¨ãªãã¨ãvaræã¯å®è¡æãªã®ã§ãããããããã¨ãè¨ãåããªãã®ã§ããæ¬¡ã®ããã°ã©ã ããFirefoxï¼ã¾ãã¯ãalertãå®ç¾©ããRhinoï¼ã§å®è¡ãã¦ã¿ã¾ãããï¼IEã§ã¯ãã¡ã§ã[追è¨]IEã§ãåããã®ãç¯ã®æå¾ã«è¿½å ãã¾ãã[/追è¨]ï¼ã
if (this.hasOwnProperty('f')) alert("function 'f' is allocated.");
if (this.hasOwnProperty('x')) alert("variable 'x' is allocated.");
if (this.hasOwnProperty('y')) alert("variable 'y' is allocated.");function f() {}
var x = "hello";
var y;
hasOwnPropertyã¡ã½ããã¯ããªãã¸ã§ã¯ãã®ããããã£ã®åå¨ã確å®ã«å¤å®ãã¾ãï¼IEã«ã¯ãªããã©ï¼IEã«ãããã¾ãããwindowãªãã¸ã§ã¯ãã«å¯¾ãã¦ã¯æå¾
éãã«åãã¦ããã¾ããï¼ããã®çµæãããvaræããã¯ãå®£è¨æã§ãããã¨ãåããã¾ããã³ã³ãã¤ã«çµäºã®æ®µéï¼å®è¡ã®ç´åï¼ã§ã颿°ã夿°ãæºåãã§ãã¦ããã®ã§ããããã¯ã颿°å®£è¨ã夿°å®£è¨ããã½ã¼ã¹ã³ã¼ãã®ã©ãã«æ¸ããã¦ãããã¨é¢ä¿ããã¾ãããæ¬¡ã®ããã°ã©ã ã確èªãã¦ãã ããã
if (this.hasOwnProperty('f')) alert("function 'f' is allocated.");
if (this.hasOwnProperty('x')) alert("variable 'x' is allocated.");
if (this.hasOwnProperty('y')) alert("variable 'y' is allocated.");function f() {}
if (window.notDefinedOrAlwaysFalse) {
var x = "hello";
} else {
var y;
}
[追è¨]
if ('f' in this) alert("function 'f' is allocated.");
if ('x' in this) alert("variable 'x' is allocated.");
if ('y' in this) alert("variable 'y' is allocated.");function f() {}
if (window.notDefinedOrAlwaysFalse) {
var x = "hello";
} else {
var y;
}
[/追è¨]
âundefinedå¤
話ãå ã«é²ããåã«ãundefinedå¤ã«ã¤ãã¦è§¦ãã¦ããã¾ããJavaScriptã§ã¯ãæªå®ç¾©ãæå³ããâå¤âãåå¨ãã¾ãããããundefinedå¤ã§ããundefinedå¤ã¯0ã¨ãnullã¨ãNaNï¼not a numberï¼ã¨ãç°ãªãã¾ãããããªãããªå¤ãªã®ã§ããundefinedå¤ã®åã¯undefinedåã§ãããundefinedåã«å±ããå¯ä¸ã®å¤ãundefinedå¤ã§ãã
undefinedå¤ã表ç¾ãããªãã©ã«ã¯ä»æ§ã§å®ç¾©ããã¦ãã¾ãããã(void 0)
ã使ãã¾ãããããã¯ãåæåããã¦ãªã夿°ãundefinedãªãã©ã«ã®ä»£ããã«ã§ãã¾ããã¾ãããã¼ã¯ã¼ãundefinedã使ããå¦çç³»ãå¤ãããã§ãï¼undefinedå¤ãå¤ã¨ãã'undefined'ã¨ããååã®å¤§åããããã£ãåå¨ãã¾ãã
js> var UNDEFINED
js> typeof UNDEFINED
undefined
js> (void 0) === UNDEFINED
true
js>
åå¨ããªã夿°ï¼ããããã£ã®åãtypeofã§èª¿ã¹ãã¨ï¼æååï¼'undefined'ãè¿ã£ã¦ãã¾ããããã¯ã夿°ï¼ããããã£ãåå¨ããã®å¤ãå¤ãundefinedå¤ã§ããç¶æ³ã¨åºå¥ã§ãã¾ããã夿°ï¼ããããã£ã®åå¨ã確èªããã«ã¯ãforæã§åæãã¦ï¼inæ¼ç®åã§èª¿ã¹ãããå
ã«åºç¾ããhasOwnPropertyã¡ã½ããã使ãå¿
è¦ãããã¾ãï¼ãããããã®2ã¤ã®æ¹æ³ã®çµæã¯å¿
ãããä¸è´ãã¾ãããinã¯__proto__ãã§ã¼ã³ããã©ãã¾ãï¼ã
typeofã«åå¨ããªã夿°ã渡ããã¨ã¯ã§ãã¾ãããåå¨ããªã夿°ã«ã¢ã¯ã»ã¹ããã¨ã¨ã©ã¼ã«ãªãã®ã§ã次ã®2ã¤ã¯ç価ã§ã¯ããã¾ããã
// someVarãåå¨ããªãã¦ã大ä¸å¤«
if (typeof(someVar) == 'undefined') alert("someVar is undefined");// someVarãåå¨ããªãã¨ã¨ã©ã¼
if (someVar == (void 0)) alert("someVar is undefined");
âvaræã¯ãã®ããã«åã
varæã¯ãã³ã³ãã¤ã«æã«å¤æ°ã確ä¿ããåãããã¾ãããã ãã夿°ã®åæåã¯ãã¾ãããããã£ãundefinedå¤ã§åæåãã¦ããã¨ãããã¾ããã
ããã§â夿°âã¨ãã£ã¦ããã®ã¯ãã¹ã³ã¼ãï¼ã¨å¼ã°ãããªãã¸ã§ã¯ãï¼ã®ããããã£ã®ãã¨ã§ããJavaScriptã®ã¹ã³ã¼ãã¯ãååã¨ãã¦å¤§åã¹ã³ã¼ãï¼å¤§åãªãã¸ã§ã¯ãï¼ã¨é¢æ°å 屿ã¹ã³ã¼ãï¼å¼ã³åºããªãã¸ã§ã¯ãï¼ããããã¾ãããã¯ãã¼ã¸ã£ã¨ã¤ãã³ããã³ãã©ï¼ãã©ã¦ã¶åºæï¼ã®2ã¤ã¯ä¾å¤ã§ãããä»èããå¿ è¦ã¯ããã¾ããã
次ã®ï¼varæãä½çºçã«å¤ãï¼ããã°ã©ã ãè¦ã¦ãã ããã
var a = [2, -1, 0, 10, -5, 3];
var result = 0;
for (var i = 0; i < a.length; i++) {
var x = a[i];
if (x > 0) {
var sq = x * x;
result += sq;
}
}
alert(result);
ããã¯ã次ã®ããã°ã©ã ã¨ç価ã§ãã夿°å®£è¨ã¯ã³ã³ãã¤ã«æã«å¦çãããã®ã§ãSTARTã¨æ¸ãã¦ããã¨ããããå®è¡ãéå§ãããã¨æã£ã¦ãã ããã
var a;
var result;
var i;
var x;
var sq;/* === START === */
a = [2, -1, 0, 10, -5, 3];
result = 0;
for (i = 0; i < a.length; i++) {
x = a[i];
if (x > 0) {
sq = x * x;
result += sq;
}
}
alert(result);
âé©ãã¹ãç¾è±¡
ä»ã¾ã§ã®èª¬æãããJavaScripã«ã¯ãããã¯ã¹ã³ã¼ãããªããã¨ãããã£ãã§ããããããã¯ãããªãå¥å¦ãªç¾è±¡ãå¼ãèµ·ããã¾ããæ¬¡ã®ä¾ãè¦ã¦ãã ããã
function fun1(arg) {
x = arg;
return x + x;
}function fun2(arg, flag) {
x = arg;
if (flag) {
var x = arg + arg;
return x;
}
return x;
}
fun1ã®å¤æ°xã¯é¢æ°å ã§å®£è¨ããã¦ãã¾ããããããªã¨ãxã¯å¤§å夿°ãæãã®ã§ããã¤ã¾ããfun1ã¯ã大å夿°ã«å¼æ°å¤ãã»ãããã¦ããã®2åãæ»ãå¤ã§è¿ãã¾ãã
js> typeof x
undefined
js> fun1(5)
10
js> typeof x
number
js> x
5
js>
ãã¦ãfun2ã§ãããããã¯ç¬¬2弿°ãtrueãªãfun1ã¨åãåä½ã§ãããã§ãªããªã第1弿°argã¨å¤æ°xã¨æ»ãå¤ãåãå¤ã«ãªãã¾ã -- ã¨ãããæã£ãã§ãããããªãï¼ããªãï¼ããã¦ã®äººï¼ã
js> x = 0
0
js> fun2(5, true)
10
js> x
0
js> fun2(5, false)
5
js> x
0
js>
ããããã大å夿°xã«ã¯ä½ã®å½±é¿ãä¸ãã¾ããã
ããã§ãã颿°å®ç¾©ã«ããã¦ãã屿夿°ã¯å®è¡åã«æºåããã¾ãã夿°å®£è¨ï¼varæï¼ããããã¯ã®ãªãã«ãã£ã¦ãããããªãã¨ã«ã¯é¢ä¿ãªãããã°ã©ã åé ã«å®£è¨ãéç´ããã¦ãã¾ãã®ã§ããã§ããããfun2ã¯ã次ã¨ç価ã§ãã
function fun2(arg, flag) {
var x;
x = arg;
if (flag) {
x = arg + arg;
return x;
}
return x;
}
ãããã¯ã¹ã³ã¼ãã³ã°ã«æ £ãã¦ããã¨ãããã¯ç¸å½ã«ã·ã§ããã³ã°ãªäºå®ã§ãã
âçä¼¼ãããã¯ã¨å°æ¥ã®ä»æ§å¤æ´
ãããã¯ã¹ã³ã¼ãããªããã¨ã¯ããªãã®æ··ä¹±ãæãã¾ããä¾ãã°ãå ã«æããä¾ï¼ä¸ã«åæ²ï¼ã«ããã¦ã夿°i, x, sqãªã©ã¯ã«ã¼ãã®å¤ã§ãåå¨ãç¶ãã¾ãã
for (var i = 0; i < a.length; i++) {
var x = a[i];
if (x > 0) {
var sq = x * x;
result += sq;
}
}
䏿çãªå¤æ°ã§ã¹ã³ã¼ããæ±ãã¦ãã¾ããã¨ãé¿ããã«ã¯ãfunctionå¼ã使ã£ãçä¼¼ãããã¯ã¹ã³ã¼ãã使ãã¾ãã
var a = [2, -1, 0, 10, -5, 3];
var result = 0;
(function () {
for (var i = 0; i < a.length; i++) {
var x = a[i];
if (x > 0) {
var sq = x * x;
result += sq;
}
}
})();
alert(result);
ããããã¨ãi, x, sqã¯é¢æ°å 屿ã¹ã³ã¼ãã§å®ç¾©ãããã®ã§ãå¤é¨ã¾ã§æ¼ãåºããã¨ã¯ããã¾ããã
ãããªããªãã¯ãããã¨ã¯ããããããã¯ã¹ã³ã¼ãã®æ¬ å¦ãåé¡ãå¼ãèµ·ããã®ã¯æãããªã®ã§ãJavaScript 2.0ï¼ECMAScript 第4çï¼ã§ã¯ãããã¯ã¹ã³ã¼ããå°å
¥ãã¾ãï¼ããããå¾ãªãï¼ãã¾ããx = arg;
ã®ãããªä»£å
¥æã§æ°ãã夿°ããã®å ´ã§çæããã仿§ãè³ï¼ããã°ï¼ãããªãã®ã§ãstrictã¢ã¼ãã§ã¯ã"variables must be declared" ã¨ãªãããã§ãã
âä»åã®ã¾ã¨ã
- JavaScriptã®functionæã¨varæã¯å®£è¨æã§ããã
- 颿°ã¨å¤æ°ã¯ã³ã³ãã¤ã«æã«æºåãããå®è¡æã«ã¯æåããåå¨ããå©ç¨å¯è½ã«ãªã£ã¦ããã
- å®è¡éå§æç¹ã§ã¯ã夿°ã®å¤ã¯undefinedå¤ã§ããã
- JavaScriptã«ã¯ã大åã¹ã³ã¼ãã¨é¢æ°å 屿ã¹ã³ã¼ããããã
- varæãããã°ã©ã ã®ã©ãã«ç½®ããã¦ãè¨è¿°ä½ç½®ã«ç¡é¢ä¿ã«ãããã°ã©ã ï¼ãããã¬ãã«ã³ã¼ãã¾ãã¯é¢æ°å®ç¾©ã³ã¼ãï¼å é ã«å¤æ°å®£è¨ãããã¨ã¿ãªãããã
- ãããã£ã¦ãJavaScriptã«ãããã¯ã¹ã³ã¼ãã¯åå¨ããªãã
(function () { ... })()
ã¨ããã¨ãæ¬ä¼¼çãªãããã¯ã¹ã³ã¼ããå®ç¾ã§ããã
次åã¯ãã¹ã³ã¼ãã³ã°ã«é¢é£ãã¦ã颿°å 颿°ã¨ã¯ãã¼ã¸ã£ã«ã¤ãã¦è¿°ã¹ãã¤ããã§ãï¼ãã¦ããã¤ã«ãªãããªï¼ï¼