JavaScript 技術概説

はじめに

HTML がウェブページの構造と内容を定義し、CSS がフォーマットと外観を定義しているのに対し、JavaScript ははインタラクティブ機能をウェブページに追加し、豊富なウェブアプリケーションを作成します。

しかしながら、ウェブブラウザーの文脈で解釈されるこの「JavaScript」という包括的用語は、まったく異なる複数の要素を含んでいます。その要素とは、中核となるプログラミング言語(ECMAScript)、Web API、そして DOM(Document Object Model) です。

JavaScript: コア言語 (ECMAScript)

JavaScript の中核となる言語は ECMAScript という名前の言語として ECMA TC39 委員会で標準化されています。仕様の最新バージョンは ECMAScript 6.0 となります。

このコア言語はまた、node.js といったブラウザー以外の環境でも使用されています。

ECMAScript の該当範囲

とりわけ、ECMAScript は以下のものを定義しています。

  • 言語文法(構文解析のルール、キーワード、制御フロー、オブジェクト リテラルの初期化……)
  • エラー処理のメカニズム (throwtry/catch、ユーザー定義エラー型の作成機能)
  • 型 (真偽値、数値、文字列、関数、オブジェクト……)
  • グローバルオブジェクト。ブラウザー環境では、このグローバルオブジェクトは window オブジェクトですが、ECMAScript ではブラウザーとは直接関係のない API のみが定義されています。例えば parseIntparseFloatdecodeURIencodeURI……
  • プロトタイプベースの継承メカニズム
  • ビルトインオブジェクトと関数(JSONMathArray.prototype メソッド、オブジェクト内部確認メソッド……)
  • Strict モード

ブラウザーサポート

2016 年 10 月現在、主要ウェブブラウザーの現在のバージョンは、ECMAScript 5.1ECMAScript 2015(ES6としても知られる)を実装しますが、古いバージョン(まだ使用中)はECMAScript 5のみが実装されています。

将来

ECMAScript の第 6 版は、ECMA 総会で 2015 年 6 月 17 日に正式に承認され、標準として公開されました。 それ以来、ECMAScript の版は毎年発行されています。

国際化 API

ECMAScript 国際化 API 仕様は Ecma TC39 によって標準化された ECMAScript 言語仕様の増補仕様です。国際化 API は JavaScript アプリケーションのための照合機能(文字列比較)、数値フォーマット、日時フォーマットを提供し、アプリケーション上で言語を選択して必要に応じて各種機能を調整可能にします。標準仕様は 2012 年 12 月に承認されました。ブラウザーでの実装状況は Intl オブジェクトのドキュメントにて随時更新されています。

DOM (Document Object Model)

WebIDL

WebIDL 仕様は DOM 技術と ECMAScript とを繋ぐ機能を提供します。

DOM の中核

Document Object Model (DOM) は HTML、XHTML、XML ドキュメントのオブジェクトを表現しその情報をやりとりするための、クラスプラットフォームな、言語に依存しない規則のことです。DOM ツリー内のオブジェクトはそのオブジェクトのメソッドを使って処理、操作できます。W3C によって Document Object Model の中核部分が標準化されており、これにより HTML や XML ドキュメントをオブジェクトとして抽象化して言語に依存しないインターフェースを定義し、その抽象化したものを取り扱うメカニズムも定義されます。DOM によって定義されているものには、次のものがあります :

  • DOM core で定義されている、文書構造、ツリーモデルや DOM イベントアーキテクチャ。NodeElementDocumentFragmentDocumentDOMImplementationEventEventTarget など。
  • DOM イベントアーキテクチャの大まかな定義に加え、DOM events で定義されるより具体的なイベント。
  • その他、DOM TraversalDOM Range など。

ECMAScript から見た場合に、DOM 仕様で定義されるオブジェクトのことを「ホストオブジェクト」と呼びます。

HTML DOM

ウェブのマークアップである HTML は、DOM に関しても規定しています。HTML は DOM Core 内で定義された抽象概念の上位レイヤーを形成し、更に要素の意味も定義しています。HTML DOM には HTML 要素の className プロパティ、あるいは document.body といった API などが含まれます。

HTML 仕様はドキュメント上の制約事項についても定義しています。例えば、「順不同リストを意味する ul 要素のすべての子は、そのリストアイテムを意味する li 要素でなければならない」などです。一般に、標準で定義されていない要素や属性を使用することは認められていません。

Document オブジェクトや、Window オブジェクトなどの DOM 要素についてお探しであれば、DOM ドキュメントをご覧ください。

その他の重要な API

ブラウザーサポートについて

どのウェブ開発者も「DOM は面倒である」ということに悩まされてきました。ブラウザーのサポートの統一性はその機能によって大きく異なります。この状況の主な理由は、DOM の重要な機能の多くが、仮にあったとしてもその仕様が非常に不明確であったという事実です。また様々なウェブブラウザーが、例えば Internet Explorer によるイベントモデルの使用実態と一致させようと、互換性の無い機能を追加してきました。2011 年 6 月現在、W3C と特に WHATWG が相互運用性を改善するために細部にわたって古い機能を定義しており、これらの仕様に基づいて、ブラウザーへの実装は日々改善されています。

ブラウザー間の互換性保持のための一般的なアプローチのひとつとして、JavaScript のライブラリーの使用が挙げられます。これらのライブラリーは DOM の機能を抽象化し、異なるブラウザーでこれらの API が同じように動作することを保証します。最も広く使われているフレームワークには、jQueryprototypeYUI があります。

ドキュメントのタグと貢献者

タグ: 
 このページの貢献者: momdo, x2357, ethertank, sii, shirayuki
 最終更新者: momdo,