JavaScriptは1995年5月、Brendan Eichによって10日間で作成されました。EichはNetscapeで働き、同社のウェブブラウザ *Netscape Navigator* 用にJavaScriptを実装しました。
クライアントサイドウェブの主要なインタラクティブ部分はJavaで実装されるという考えでした。JavaScriptはそれらの部分のための接着剤言語であり、HTMLをわずかにインタラクティブにするためのものでした。Javaを支援するという役割から、JavaScriptはJavaのように見える必要がありました。そのため、Perl、Python、TCLなどの既存のソリューションは除外されました。
当初、JavaScriptの名前は何度か変更されました。
JavaScriptには2つの標準があります。
これらの標準で記述されている言語は *ECMAScript* であり、 *JavaScript* ではありません。Sun(現Oracle)が後者の名前の商標を持っていたため、異なる名前が選ばれました。「ECMAScript」の「ECMA」は、主要な標準を管理する組織に由来します。
その組織の元の名前は *ECMA* であり、 *European Computer Manufacturers Association* の頭字語でした。その後、組織の活動がヨーロッパの範囲を超えたため、 *Ecma International* (「Ecma」は固有名詞であり、頭字語ではない)に変更されました。最初のすべて大文字の頭字語が、ECMAScriptのスペルの説明になっています。
原則として、JavaScriptとECMAScriptは同じ意味です。場合によっては、次の区別がなされます。
したがって、 *ECMAScript 6* は言語のバージョン(第6版)です。
これはECMAScript各バージョンの簡単なタイムラインです。
TC39はJavaScriptを進化させる委員会です。そのメンバーは、厳密に言えば企業です:Adobe、Apple、Facebook、Google、Microsoft、Mozilla、Opera、Twitterなど。つまり、通常は激しい競争相手である企業が、言語の善のために協力しています。
TC39は2ヶ月ごとに会議を開き、メンバーが任命した代表者と招待された専門家が参加します。それらの会議の議事録は、GitHubリポジトリで公開されています。
ECMAScript 6では、当時使用されていたリリースプロセスに2つの問題が明らかになりました。
リリース間の時間が長すぎると、早期に準備が整った機能は、リリースされるまで長い間待つ必要があり、また、遅れて準備が整った機能は、期限に間に合わせるために急いでリリースされるリスクがあります。
機能は、実装および使用されるずっと前に設計されることが多いため、実装と使用に関連する設計上の欠陥は、あまりにも遅く発見されました。
これらの問題に対応して、TC39は新しい *TC39プロセス* を導入しました。
その結果、より小さく、段階的なリリースとなり、その機能は既に現場テストされています。図1はTC39のプロセスを示しています。
ES2016は、TC39プロセスに従って設計された最初のECMAScriptバージョンでした。
ES6まで、JavaScriptについてECMAScriptのバージョンで考えるのが一般的でした – 例えば、「このブラウザはES6をまだサポートしていますか?」
ES2016以降は、個々の機能で考える方が良いでしょう。機能がステージ4に達したら、安全に使用できます(ターゲットとするJavaScriptエンジンでサポートされている場合)。次のECMAScriptリリースまで待つ必要はありません。
さまざまな提案機能がどのステージにあるのか疑問に思っている場合は、GitHubリポジトリproposals
を参照してください。
はい、TC39リポジトリには承認済みの提案がリストされており、どのECMAScriptバージョンで導入されたかが記載されています。
時折出てくるアイデアの1つは、古い機能や癖を取り除くことでJavaScriptをクリーンアップすることです。そのアイデアの魅力は明らかですが、重大な欠点もあります。
後方互換性のない新しいバージョンのJavaScriptを作成し、すべての欠陥を修正すると仮定しましょう。その結果、次の問題が発生します。
では、解決策は何でしょうか?両方を得ることはできますか?ES6で選択されたアプローチは「One JavaScript」と呼ばれます。
let
による変数の宣言です。これはvar
の改良版です。yield
はジェネレータ内でのみキーワードです(ES6で導入されました)。そして、モジュールとクラス内のすべてのコード(どちらもES6で導入)は暗黙的に厳格モードです。 クイズ
クイズアプリを参照してください。