ECMAScript 5ã®ãªããžã§ã¯ããšããããã£ã®æ©èœãåæããŠããŸããã ããã¯èšèªã®å·šå€§ãªæ°ããåŽé¢ã§ãããç¹å¥ãªèæ
®ã«å€ããŸãã
ä»ã«ã泚æãå¿
èŠãªæ°ããæ©èœãšAPIãããã€ããããŸãã æãéèŠãªã®ã¯ã
å³æ Œã¢ãŒããšãã€ãã£ã
JSONãµããŒãã§ãã
å³æ Œã¢ãŒã
å³å¯ã¢ãŒãã¯ECMAScript 5ã®æ°æ©èœã§ãããã°ã©ã ãŸãã¯é¢æ°ããå³å¯ãªãæäœã³ã³ããã¹ãã§åŒ·å¶çã«å®è¡ã§ããŸãã å³å¯ãªã³ã³ããã¹ãã¯ãç¹å®ã®ã¢ã¯ã·ã§ã³ãå®è¡ããèœåã劚ããããå€ãã®äŸå€ãã¹ããŒããŸãïŒãŸãããŠãŒã¶ãŒã«ããå€ãã®æ
å ±ãæäŸãããã©ããããäžã«ããã³ãŒãã£ã³ã°ãã©ãã€ã ããµããŒãããŸãïŒã
ECMAScript 5ã¯ECMAScript 3ãšäžäœäºææ§ããããŸãããçŸåšãæšå¥šããããŠããªãECMAScript 3ã®ãã¹ãŠã®ãæ©èœãã¯ãå³æ Œã¢ãŒãã§åçŽã«ç¡å¹ïŒãŸãã¯äŸå€ãã¹ããŒïŒã«ãªããŸãã
å³æ Œã¢ãŒãã¯ãäžåºŠã«ããã€ãã®åŽé¢ã§åœ¹ç«ã¡ãŸãã
- äžè¬çãªã³ãŒãã£ã³ã°ã®ã¿ã€ããã¹ãã€ã³ã¿ãŒã»ããããäŸå€ãã¹ããŒããŸãã
- ãæ¯èŒçå±éºãªãã¢ã¯ã·ã§ã³ïŒã°ããŒãã«ãªããžã§ã¯ããžã®ã¢ã¯ã»ã¹ã®ååŸãªã©ïŒãå®è¡ããããšãã«ãäŸå€ãé²æ¢ãŸãã¯ã¹ããŒããŸãã
- çŽããããããŸãã¯èãã«ããESæ©èœãç¡å¹ã«ããŸãã
å³æ Œãªã¢ãŒãæ
å ±ã®ã»ãšãã©ã¯ã
ES5ä»æ§[PDF]ã® 223ããŒãžã«ãããŸãã
ã¹ããªã¯ãã¢ãŒãECMAScript 5ã¯ãFirefoxã§äœ¿çšå¯èœãªã¹ããªã¯ãã¢ãŒãïŒconfigïŒjavascript.options.strictãã©ã¡ãŒã¿ãŒã«ã€ããŠæå¹ã«ã§ããïŒãšã¯ç°ãªãããšã«æ³šæããŠãã ããã ES5ã®å³æ Œã¢ãŒãã¯ãæœåšçãªãšã©ãŒã®å®å
šã«ç°ãªãã»ããããããã¯ããŸãïŒæ¢åã®Firefoxã®å³æ Œã¢ãŒãã¯ãé©åãªã³ãŒããèšè¿°ããããã®æšå¥šäºé
ãé å®ããããšããŸããããã以äžã®ããšã¯è¡ããŸããïŒã
å³æ Œã¢ãŒããæå¹ã«ããã«ã¯ã©ãããã°ããã§ããïŒ
ã·ã³ãã«ã ãã®ã¹ããŒãã¡ã³ããããã°ã©ã ã®äžã«è²Œãä»ããŠãã¹ã¯ãªããå
šäœã§æå¹ã«ããŸãã
"use strict" ;
* This source code was highlighted with Source Code Highlighter .
ãŸãã¯ããã®ã¹ããŒãã¡ã³ããé¢æ°å
ã«é
眮ããŠããã®ã³ã³ããã¹ãå
ã§ã®ã¿å³å¯ã¢ãŒããæå¹ã«ããŸãã
function imStrict(){
"use strict" ;
// ... your code ...
}
* This source code was highlighted with Source Code Highlighter .
å³å¯ã¢ãŒããæå¹ã«ããããã«äœ¿çšãããæ§æã«æ³šæããŠãã ããïŒç§ã¯æ°ã«å
¥ã£ãŠããŸãïŒïŒã ããã¯ããuse strictããšããå€ãå«ãåäžã®ã¹ããŒãã¡ã³ãæååã§ãã
å³æ Œã¢ãŒããå®çŸ©ããããã®æ°ããæ§æã¯å°å
¥ãããŠããŸããã ããã¯å€§ããªãã©ã¹ã§ãã ããã¯ãã¹ã¯ãªããã§å³æ Œã¢ãŒããæå¹ã«ã§ããããšãæå³ããŸã-ä»æ¥-ææªã®å Žåãå€ããã©ãŠã¶ã§ã¯å¯äœçšããããŸããã
ãããš
åã®èšäºã®äŸãããããããã«ãECMAScript 5ä»æ§ã®èšèªã«ã¯ãæ°ããæ§æã®è¿œå ãå€æŽã¯ã»ãšãã©ãããŸãããã€ãŸããES5ã¹ã¯ãªãããã¬ã¬ã·ãŒã¯ã©ã€ã¢ã³ãåãã«æ£ããäœäžãããããšãã§ãããšããããšã§ããããã¯ECMAScript 4ã§ã¯äžå¯èœã§ãããå³å¯ã¢ãŒãããµããŒããããæ¹æ³ã¯ãå®éã®ãã®ç¹ãé®®æã«ç€ºããŠããŸãã
ãŸããé¢æ°å
ã§å³æ Œã¢ãŒããå®çŸ©ããããšã®æ°ã®å©ããåŽé¢ã¯ãå€éšããã®ã³ãŒãã«åœ±é¿ãäžããããšãªããå®å
šã«å³æ Œã¢ãŒãã§JavaScriptã©ã€ãã©ãªãå®çŸ©ã§ããããšã§ãã
// Non-strict code...
( function (){
"use strict" ;
// Define your library strictly...
})();
// Non-strict code...
* This source code was highlighted with Source Code Highlighter .
å€ãã®ã©ã€ãã©ãªã¯ãã§ã«åè¿°ã®ææ³ïŒã©ã€ãã©ãªå
šäœãå¿åé¢æ°ã§ã©ããããŠããå®è¡ïŒã䜿çšããŠãããéåžžã«ç°¡åã§ãã
å³æ Œãªäœå¶ã掻çšã§ããããã«ãªããŸãã
ã¹ã¯ãªãããå³æ Œã¢ãŒãã«ãããšãäœãå€ããã®ã§ããããïŒ ããããã
å€æ°ãšããããã£
foo = "bar";
ãå²ãåœãŠãããšã
foo = "bar";
å€æ°ãfooããå®çŸ©ãããŠããªãå Žåã倱æããŸãã 以åã¯ããã®ã³ãŒãã¯ã°ããŒãã«ãªããžã§ã¯ãïŒããšãã°ãwindow.fooïŒã®fooããããã£ã«å€ãå²ãåœãŠãŠããŸããããçŸåšã¯äŸå€ã®ã¿ãã¹ããŒããŸãã ããã«ãããè¿·æãªãšã©ãŒã確å®ã«æé€ãããŸãã
æžã蟌ã¿å¯èœãªå±æ§ãfalseã«èšå®ãããŠããããããã£ãå€æŽããããæ§æå¯èœãªå±æ§ãfalseã«èšå®ãããŠããããããã£ãåé€ããããæ¡åŒµå¯èœãªå±æ§ãfalseã«èšå®ãããŠãããªããžã§ã¯ãã«ããããã£ãè¿œå ããããšãããšã誀ã£ãŠå€±æããŸãïŒãããã®å±æ§
ã«ã€ããŠã¯åã«
説æããŸãã ïŒ éåžžã¢ãŒãã§ã¯ããããã®ã¢ã¯ã·ã§ã³ã®ãããããå®è¡ãããŠããšã©ãŒã¯ã¹ããŒããããèŠåãªãã«å€±æããŸãã
å€æ°ãé¢æ°ããŸãã¯ãã©ã¡ãŒã¿ãŒãåé€ãããšãšã©ãŒã«ãªããŸãã
var foo = "test" ;
function test(){}
delete foo; // Error
delete test; // Error
function test2(arg) {
delete arg; // Error
}
* This source code was highlighted with Source Code Highlighter .
1ã€ã®ãªããžã§ã¯ããªãã©ã«ã§ããããã£ãè€æ°åå®çŸ©ãããšãäŸå€ãã¹ããŒãããŸãã
// Error
{ foo: true , foo: false }
* This source code was highlighted with Source Code Highlighter .
è©äŸ¡ãã
ãevalããšããååã䜿çšããè©Šã¿ã¯ã»ãšãã©çŠæ¢ãããŠããŸããããã¯ãevalé¢æ°ããªããžã§ã¯ãã®å€æ°ãŸãã¯ããããã£ã«å²ãåœãŠãæ©èœã§ãã
// All generate errors...
obj.eval = ...
obj.foo = eval;
var eval = ...;
for ( var eval in ... ) {}
function eval(){}
function test(eval){}
function (eval){}
new Function( "eval" )
* This source code was highlighted with Source Code Highlighter .
ããã«ãevalãä»ããŠæ°ããå€æ°ãå°å
¥ããè©Šã¿ã¯ãããã¯ãããŸãã
eval( "var a = false;" );
print( typeof a ); // undefined
* This source code was highlighted with Source Code Highlighter .
æ©èœ
åŒæ°ãªããžã§ã¯ããæžãæããããšãããšããšã©ãŒãçºçããŸãã
arguments = [...]; // not allowed
* This source code was highlighted with Source Code Highlighter .
åãååã§è€æ°ã®åŒæ°ãå®çŸ©ãããšãšã©ãŒã«ãªããŸã
function (Foo, Foo) {} // error
* This source code was highlighted with Source Code Highlighter .
arguments.callerããã³arguments.calleeã«ã¢ã¯ã»ã¹ãããšãäŸå€ãã¹ããŒãããããã«ãªããŸããã ãããã£ãŠããªã³ã¯ããå¿åé¢æ°ã«ã¯ãããšãã°æ¬¡ã®ããã«ååãä»ããå¿
èŠããããŸãã
setTimeout( function later(){
// do stuff...
setTimeout( later, 1000 );
}, 1000 );
* This source code was highlighted with Source Code Highlighter .
ä»ã®é¢æ°ã®åŒæ°ãšåŒã³åºãå
ã®ããããã£ã¯ããååšããŸãã-ããããå®çŸ©ããæ©èœã¯çŠæ¢ãããŠããŸãã
function test(){
function inner(){
// Don't exist, either
test.arguments = ...; // Error
inner.caller = ...; // Error
}
}
* This source code was highlighted with Source Code Highlighter .
æåŸã«ãé·å¹Žã®ïŒãããŠéåžžã«è¿·æãªïŒãšã©ãŒãä¿®æ£ãããŸããïŒnullãŸãã¯undefinedãã°ããŒãã«ãªããžã§ã¯ãã«ãªãããšã匷å¶ãããå Žåã å³å¯ã¢ãŒãã§ã¯ããããé²ãããšãã§ãã代ããã«äŸå€ãã¹ããŒãããŸãã
( function (){ ... }).call( null ); // Exception
* This source code was highlighted with Source Code Highlighter .
ïŒïŒ{}
å³æ Œã¢ãŒãã§ã¯ãã¹ããŒãã¡ã³ãã¯Boseã«çœ®ãããŸããå®éãæ§æãšã©ãŒã®ããã«èŠããŸãã ãã®æŒç®åã¯ç¢ºãã«èª€è§£ãããŠããã誀ã£ãŠäœ¿çšãããŠããå¯èœæ§ããããšããäºå®ã«ããããããããã®ãããªèšé²ã®åœ±é¿ãåããã®ã«ååãã©ããã¯ããããŸããã
ECMAScript 5ã®ã¹ããªã¯ãã¢ãŒãã§è¡ãããå€æŽã¯ééããªãå€åããŸãïŒæã«ããåé€ãªã©ã®æäœçãªèšå®ã®åŒ·å¶ããããªããžã§ã¯ããªãã©ã«ã®ããããã£ããªãŒããŒã©ã€ãããæ©èœãªã©ãèšèªã®æªããšã©ãŒã®ä¿®æ£ãŸã§ïŒã 人ã
ããããã®ã€ãããŒã·ã§ã³ã«ã©ã®ããã«é©å¿ãå§ãããããã®ã€ãããŒã·ã§ã³ãJavaScriptã®éçºãã©ã®ããã«å€ããããèŠãã®ã¯èå³æ·±ãã§ãããã
jQueryãES5ã¹ããªã¯ãã¢ãŒããšäºææ§ãæã€ããã«ãªã£ãããšã¯ééããããŸããã ïŒãã®ã¹ããŒãã¡ã³ããæ€èšŒã§ããããã«ïŒãã®èšèªã®å®è£
ãå©çšå¯èœã«ãªã次第ãjQueryãå³å¯ã¢ãŒãã§ã®ã¿åäœããããã«åãã§åãæ¿ããŸãã
ãžã§ã³ãœã³
ãã®èšèªã®2çªç®ã®éèŠãªæ©èœã¯ãèšèªèªäœã«ãã€ãã£ãJSONãµããŒããè¿œå ãããŠããããšã§ãã
ç§ã¯ãã®ã¹ãããã
é·ãé 䞻匵ããŠ
ããŸããã ãæçµçã«ä»æ§ã§ãããèŠãããšãã§ããŠãšãŠãããããã§ãã
è¿ãå°æ¥ãJSONã¢ããªã±ãŒã·ã§ã³ã®Crockfordãã
json2.jsãžã®ç§»è¡ãéå§ããŠãã ããã ECMAScript 5ä»æ§ãšå®å
šãªäºææ§ãããããã€ãã£ãïŒããé«éïŒïŒå®è£
ãååšããå Žåã¯ãããé©åã«åãæ¿ããŸãã
å®éãæšæ¥jQueryã®å€æŽã
ã³ãããããŠãJSON.parseã¡ãœãããååšããå Žåã¯ããã䜿çšããããã«ããŸãããããã§ããã®ã¡ãœãããæçµçã«æå®ãããŸããã
JSONãåŠçããã«ã¯ãJSON.parseïŒJSONæååãJavaScriptãªããžã§ã¯ãã«å€æããïŒãšJSON.stringifyïŒJavaScriptãªããžã§ã¯ããã·ãªã¢ã«åãããæååã«å€æããïŒã®2ã€ã®äž»ãªæ¹æ³ããããŸãã
JSON.parseïŒããã¹ãïŒ
ã·ãªã¢ã«åãããJSONæååãJavaScriptãªããžã§ã¯ãã«å€æããŸã
var obj = JSON.parse( '{"name":"John"}' );
// Prints 'John'
print( obj.name );
* This source code was highlighted with Source Code Highlighter .
JSON.parseïŒããã¹ãã翻蚳ïŒ
å€ææ©èœã䜿çšããŠå€ãå€æããããå€ãå®å
šã«åé€ããŸãã
function translate(key, value) {
if ( key === "name" ) {
return value + " Resig" ;
}
}
var obj = JSON.parse( '{"name":"John","last":"Resig"}' , translate);
// Prints 'John Resig'
print( obj.name );
// Undefined
print( obj.last );
* This source code was highlighted with Source Code Highlighter .
JSON.stringifyïŒobjïŒ
JavaScriptãªããžã§ã¯ããã·ãªã¢ã«åãããæååã«å€æããŸã
var str = JSON.stringify({ name: "John" });
// Prints {"name":"John"}
print( str );
* This source code was highlighted with Source Code Highlighter .
JSON.stringifyïŒobjã["white"ã "list"]ïŒ
æå®ãããããããã£ã®ããã¯ã€ããªã¹ããã®ã¿ãã·ãªã¢ã«åããŸãã
var list = [ "name" ];
var str = JSON.stringify({name: "John" , last: "Resig" }, list);
// Prints {"name":"John"}
print( str );
* This source code was highlighted with Source Code Highlighter .
JSON.stringifyïŒobjã翻蚳ïŒ
å€æé¢æ°ã䜿çšããŠãªããžã§ã¯ããã·ãªã¢ã«åããŸãã
function translate(key, value) {
if ( key === "name" ) {
return value + " Resig" ;
}
}
var str = JSON.stringify({ "name" : "John" , "last" : "Resig" }, translate);
// Prints {"name":"John Resig"}
print( str );
* This source code was highlighted with Source Code Highlighter .
JSON.stringifyïŒobjãnullã2ïŒ
æå®ããæ°ã®ã¹ããŒã¹ãåºåã«åçã«è¿œå ããŸãã
var str = JSON.stringify({ name: "John" }, null , 2);
// Prints:
// {
// "name": "John"
// }
print( str );
* This source code was highlighted with Source Code Highlighter .
JSON.stringifyïŒobjãnullãã\ tãïŒ
æå®ãããæååã䜿çšããŠã¿ããå®è¡ããŸãã
var str = JSON.stringify({ name: "John" }, null , "\t" );
// Prints:
// {\n\t"name": "John"\n}
print( str );
* This source code was highlighted with Source Code Highlighter .
ãŸããããã€ãã®åºæ¬çãªãªããžã§ã¯ãã«ããã€ãã®æ°ãããŠãããŒãµã«ã¡ãœãããè¿œå ãããŸããããå¿ããã¯ããã»ã©èå³æ·±ããã®ã§ã¯ãããŸããã StringãBooleanãããã³Numberã®çµæã¯query.valueOfïŒïŒãšåçã§ãããDateã®çµæã¯.toISOStringïŒïŒã®åŒã³åºããšåçã§ãã
// Yawn...
String.prototype.toJSON
Boolean.prototype.toJSON
Number.prototype.toJSON
Date.prototype.toJSON
* This source code was highlighted with Source Code Highlighter .
.bindïŒïŒ
èšèªãžã®æè¿ãã¹ãè¿œå æ©èœã¯ãé¢æ°ã³ã³ããã¹ããå®è£
ããããã®çµã¿èŸŒã¿ã®.bindïŒïŒã¡ãœããã§ãïŒå®éã«ã¯ãPrototype.jsã©ã€ãã©ãªãŒã®.bindå®è£
ãšåãã§ãïŒã
Function.prototype.bindïŒthisArgãarg1ãarg2 ....ïŒ
æå®ãããé¢æ°ã®ãthisãå€ãæå®ããããªããžã§ã¯ãã«èšå®ããæå®ããããã©ã¡ãŒã¿ãŒãé¢æ°ã«æž¡ããŸãã
var obj = {
method: function (name){
this .name = name;
}
};
setTimeout( obj.method.bind(obj, "John" ), 100 );
* This source code was highlighted with Source Code Highlighter .
ãã®é¢æ°ïŒããã³ããã«çžåœãããã®ïŒãããŸããŸãªã©ã€ãã©ãªã«ååšããæéãèãããšãããã¯èšèªãžã®æè¿ãã¹ãè¿œå ã§ãã
æ¥ä»
æ¥ä»ã¯ãISOãã©ãŒãããã§è§£æããã³è¡šç€ºã§ããããã«ãªããŸããã ããããšã
Dateã³ã³ã¹ãã©ã¯ã¿ãŒã¯ãISOèŠæ Œã«åŸã£ãŠãã©ãŒããããããŠãããã®ããã«ãæåã«æ¥ä»ã®åæãè©Šã¿ããã®åŸã圌ãç解ããä»ã®åœ¢åŒã«é²ã¿ãŸãã
ããã«ãæ¥ä»ãªããžã§ã¯ãã«ã¯æ°ãã.toISOStringïŒïŒã¡ãœãããè¿œå ãããæ¥ä»ãISO圢åŒã§è¡šç€ºããŸãã
var date = new Date( "2009-05-21T16:06:05.000TZ" );
// Prints 2009-05-21T16:06:05.000TZ
print( date.toISOString() );
* This source code was highlighted with Source Code Highlighter .
.trimïŒïŒ
ãã€ãã£ãã®çµã¿èŸŒã¿.trimïŒïŒã¡ãœãããæååã«å«ãŸããããã«ãªããŸããã ä»ã®ãã¹ãŠã®ããªã ã¡ãœãããšåãããã«åäœããŸãããããé«éã«åäœããå¯èœæ§ããããŸãã
ã¹ãã£ãŒãã³ã»ã¬ãã¿ã³ã¯
ãããªã æ¹æ³ã«ã€ããŠããã«è©³ããè°è«ããŸã
ã ã
é
å
JavaScripté
åã®æ¡åŒµã¯æçµçã«æ£åŒã«å®çŸ©ãããããã§ãã 次ã®ã¡ãœãããå«ãŸããŸãïŒindexOfãlastIndexOfãeveryãsomeãforEachãmapãfilterãreduceãreduceRightã
ããã«ãæ°ããArray.isArrayã¡ãœãããè¿œå ããã次ã®æ©èœãšéåžžã«ãã䌌ãæ©èœãæäŸãããŸãã
Array.isArray = function ( array ) {
return Object.prototype.toString.call( array ) === "[object Array]" ;
};
* This source code was highlighted with Source Code Highlighter .
å
šäœãšããŠãECMAScript 5ã¯èå³æ·±ãææ¡ãããŠãããšæããŸãã ããã¯ECMAScript 4ãçŽæãã倧ããªé£èºã§ã¯ãããŸããããæãããªãšã©ãŒã®æ°ãæžãããèšèªãããå®å
šãã€é«éã«ããäžé£ã®çŽ æŽãããæ©èœåŒ·åã§ãã ããã€ãã®å®è£
ãå
¬éãããã®ã楜ãã¿ã«ããŠããŸãã