ECMAScript-262 5th Edition(ES5) 予約語一覧 と その仲間達
ES5 の予約語は以下の4種類
- Keyword
- FutureReservedWord
- NullLiteral
- null
- BooleanLiteral
- false true
Keyword
以下のトークンは、Identifiers には使用できません。
debugger は ES5 で FutureReservedWord から Keyword に昇格しました。
break | do | instanceof | typeof |
case | else | new | var |
catch | finally | return | void |
continue | for | switch | while |
debugger | function | this | with |
default | if | throw | delete |
in | try |
debugger はステートメントになりました。
// DebuggerStatement : See 12.15 debugger;
FutureReservedWord
以下のトークンは、将来のために予約されており、Identifiers には使用できません。
class | enum | extends | super |
const | export | import |
以下のトークンも Strict Mode では FutureReservedWord とみなされます。
implements | let | private | public |
yield | interface | package | protected |
static |
これもトークンといえばトークン
"use strict";
この文字列を見つけると JavaScript エンジンは、甘えを許さない鬼軍曹モード(Strict Mode)になります。
ここから本題
ES5の仕様書に定義されていなくても、歴史的な理由で実際には使えないか Minifier が警告を出すキーワードがあります。
C++ や Java ライクなキーワード
基本的に使用できないキーワードです。知らずに使うとクロスブラウザな部分でハマリます。
これらの多くはES3 で FutureReservedWord として予約されていました。
int | short | boolean | byte |
long | char | float | double |
abstract | volatile | transient | final |
throws | goto | native | synchronized |
非推奨キーワード
call | closure |
Minifier で警告がでるキーワード
一部のMinifierで警告がでますが、実用上の問題はないようです。
set | get | require |
get / set は アクセッサの定義に使用します。
get PropertyName() { FunctionBody } set PropertyName( PropertySetParameterList ) { FunctionBody }
特定環境で予約済みのキーワード
XML | for each | __proto__ | __parent__ |
__defineGetter__ | __defineSetter__ | __lookupsetter__ | __lookupgetter__ |
グローバル変数と関数
予約語ではありませんが、これらは暗黙のグローバル変数/関数として存在します。
同名の変数/関数を作成したり、代入してはいけません。
undefined | Infinity | java | NaN | Packages | eval |
window オブジェクト
window.print | window.name | window.length | window.parent |
window.top | window.self | window.window |
window.self と var self = this;
クロージャー内部から上位の this を参照するために self というローカル変数を作成したことがあると思います。
また、ローカル変数の self を下位のメソッドに引数として渡す場合もあると思います。
var self = this; function() { self.xxx; hoge(self); // selfを渡す } function hoge(context) { }
window.self がグローバル変数として存在するため、this を self に保存するという戦略はブラウザ上で動作するJavaScript だと結構微妙かもです。
仕様では、window.self は READ-ONLY で windowへの参照を持つらしいのですが、↓のようなうっかりさんなコードは、
self = this;
Firefox3.6, Google Chrome5 では window.self を上書きできてしまい、Opera10.50では無視され、IE8では「実装されていません」と謎のエラーになります。
that なんてどうでしょう。
var that = this; function() { that.xxx; }
that はアレ(手が届かない)。 this はコレ(手が届く) という距離感の意味合いもあり、クロージャの中から上位の this に触れないというもどかしさを、self に比べて的確に表現できています。
id属性によるGlobalスコープの汚染
大抵のブラウザは、
<div id="hoge" /> <div id="huga" /> <div id="piyo" />
とすると、window.hoge, window.huga, window.piyo で div ノードを参照できます。
この特性を知らずにフリーダムな id 名をつけてしまうと、謎現象に悩まされます。
えと、
間違ってたり、足りないものがあれば教えてください。