ITパスポート試験 用語辞典

じゃばすくりぷと
JavaScript
ver6
スクリプト言語の一つで、1995年にネットスケープ・コミュニケーションズによって開発された。JS(ジェイエス)とも呼ばれる。

Webページに組み込まれたプログラムを実行するのに使われるプログラミング言語。文法はCやJavaに似ているが、Javaとの直接的なつながりや互換性はない。「Java」がついている理由は、開発元のネットスケープ・コミュニケーションズ社が当時サン・マイクロシステムズと提携していたためである。

Webページのアニメーションを動作させる、メニューを表示させるなどWebページの動的な機能や双方向的な機能を実現するために欠かせない存在となっている。HTML文書内に直接書き込むことができるほか、スクリプトのみを記述したファイルを読み込む形での利用もできる。
↓ 用語データを見る
分野:
分野:テクノロジ系
中分類:アルゴリズムとプログラミング
小分類:プログラム言語
重要度:
(Wikipedia JavaScriptより)

JavaScript(ジャヴァスクリプト)とは、プログラミング言語のひとつである。Javaと名前が似ているが、異なるプログラミング言語である(後述の#歴史を参照)。

オブジェクト指向のスクリプト言語であることを特徴とする。

実行環境が主にウェブブラウザに実装され、動的なウェブサイト構築や、リッチインターネットアプリケーションなど高度なユーザインタフェースの開発に用いられる。

概要

JavaScriptという言葉は狭義にはMozillaが仕様を策定し実装しているスクリプト言語を指す。このスクリプト言語はEcmaインターナショナルでECMAScript (ECMA-262) として標準化されており、多くのWebブラウザー等はこの標準化されたECMAScriptを実装している。たとえば、マイクロソフトによる実装はJScriptと呼ぶ。

一般的にJavaScriptという言葉が使われるときはこのようなさまざまなECMAScriptの実装も含んだ幅広い意味でつかわれるので、どちらの意味でJavaScriptという言葉が使われているかは文脈で判断する必要がある。

ECMAScriptは仕様自体に独自の拡張を条件付きで認める記述があり、現在主要なブラウザが実装しているスクリプト言語はすべてECMAScriptに準拠していることになる。広義の意味でこれをJavaScriptと呼ぶ場合、主要なブラウザが実装しているスクリプト言語はマイクロソフトやGoogle, の実装も含めてJavaScriptである。

なお、Webブラウザーでよく実装されているAPIであるDOM (Document Object Model) はECMAScriptの仕様の一部ではないので、DOMの準拠の有無はECMAScriptの準拠の有無とは関係ない。

プログラミング言語としての特徴

JavaScriptはプロトタイプベースのオブジェクト指向プログラミング言語である。多くの場合はC言語に似た手続き型言語のようなスタイルで書かれるが、第一級関数をサポートしている(関数を第一級オブジェクトとして扱える)など、関数型言語の性質も持ち合わせている。そのような柔軟な設計から、いくつかのアプリケーションではマクロ言語としても採用されている。

AptanaやEclipse、NetBeans、IntelliJ IDEAなどの統合開発環境はJavaScriptをサポートしており、大規模開発が可能になっている。また各処理系の実装の違いによる互換性の問題は、Prototype JavaScript FrameworkなどのJavaScriptライブラリが吸収することにより解決が図られている。さらにExt JSなどの本格的なGUIライブラリの登場により、デスクトップアプリケーションと遜色ないユーザインタフェースの構築が可能になった。

また、Direct Web Remoting (DWR) などの技術の発達によりクライアント・サーバ間の通信が著しく容易になったことや、JettyなどのアプリケーションサーバがComet利用時のメモリ使用量の削減を実現したため、サーバからクライアントへの情報のプッシュ型の配信が実用的となった。

JavaScriptはスレッド制御の命令をサポートしていないため、マルチスレッドのコードを書くことが困難だが、WHATWGによりWeb Workers APIの策定が進められており、バックグラウンド処理や非同期入出力の制御が容易に実現できるようになる。

歴史

誕生

JavaScriptはネットスケープコミュニケーションズのブレンダン・アイクによって開発され、Netscape Navigator 2.0で実装された。開発当初はLiveScriptと呼ばれていたが、1995年にサン・マイクロシステムズ(現・オラクル)が開発したプログラミング言語Javaが当時大きな注目を浴びており、ネットスケープとサン・マイクロシステムズが業務提携していた事もあったため、JavaScriptという名前に変更された。

1996年にマイクロソフトのInternet Explorer 3.0に搭載されるようになると、その手軽さからJavaScriptは急速に普及していく。1997年、通信に関する標準を策定する国際団体EcmaインターナショナルによってJavaScriptの中核的な仕様がECMAScriptとして標準化され、多くのウェブブラウザで利用できるようになった。

ネットスケープは、ウェブアプリケーション開発言語として自社のサーバ製品に実装したLiveWire JavaScriptも発表したが、こちらはあまり普及しなかった。

JavaScriptの登場初期は、ブラウザベンダー間で言語仕様の独自拡張が行われていたため、ブラウザ間の互換性が極めて低かった。しかし現在では、ECMAScriptの策定により実装間の互換性は向上し、DOMなど関連仕様の実装に関する互換性も比較的高くなっている。ただ、現在でも特定のブラウザでしか実行できないECMAScript以前の古い構文や、ブラウザ独自のDOMを使ったコードが使用されている場合があり、互換性の問題が完全に解消されたわけではない。

現在

市場のブラウザ間互換性がある程度確立された2000年頃には、GoogleやAmazon等の大手企業もJavaScriptを積極的に利用し始めた。2005年、マイクロソフトが開発したJavaScriptの非同期通信を利用した技術にAjaxという名前が付けられたことによって、高機能なウェブアプリケーション開発言語の一つとして再び注目を集めた。Ajaxを利用している代表的なアプリケーションとして、Google マップやAmazon Diamond Searchなどがある。

また最近では、Mozilla Firefox用アドオンのGreasemonkeyやOperaの標準機能、Google Chromeのエクステンションなどにおいて、「ユーザスクリプト」と呼ばれるウェブページ読み込み時に実行できるJavaScriptアプリケーションが登場している。

以前はインタプリタ方式で実行されることが一般的であったため、実行速度はさほど速くなかったが、現在ではJITコンパイルなどを利用した各種の最適化がなされており、各ウェブブラウザのベンダーともに高速化を図ってしのぎを削っている。JavaScriptのJITコンパイラも参照。さらには、この高速化を受ける形で、Node.jsのようにサーバサイドでもJavaScriptを使う動きが見られる。

JavaScript 2.0

2000年から2003年にかけて、現在のJavaScriptの後継バージョンとなるJavaScript 2.0を作ろうとした動きがあったが、ネットスケープとマイクロソフトの対立でまとまらなかった。当時ネットスケープが提案していた案はアドビのActionScript 2.0に引き継がれ、マイクロソフトの案はJScript .NETへと引き継がれた。その後ECMAScript 4の策定が進められ、2006年の時点でMozilla Foundationはこれに基づいてJavaScript 2.0を作成することを表明していた。MozillaはECMAScript 4の策定にあたって、Pythonの文法を一部取り込んだ案を提案しており、自身でもこれを実装している

しかしその後、ECMAScriptの標準化作業がMozilla、Adobe、Opera、Googleらが推すECMAScript 4と、Microsoft、Yahoo!らが推すECMAScript 3.1に事実上分裂してしまった影響から、2008年8月に大きな方針転換があり、JavaScript 2.0のベースを策定するプロジェクトとして新たに「ECMAScript Harmony」が発足した。同プロジェクトではECMAScript 3.1をベースとしつつも、ECMAScript 4に入る予定だった機能のいくつかを取り込む形で標準を策定する予定となっている。なお、ECMAScript 4で導入された名前空間・パッケージなどの機能は導入されない。

文法

Hello world

JavaScriptは言語仕様として標準ストリームを備えていないため、Hello worldプログラムの書き方は処理系によって異なる。

alert("Hello, world!"); // 警告を表示

console.log("Hello, world!"); // JavaScriptコンソールが有効な場合

document.write("Hello, world!"); // DOM以前のやや古い書き方

// <div id="stdout"></div>という要素が存在するとして…
document.getElementById('stdout').textContent = "Hello, world!"; // DOMを利用した書き方
document.getElementById('stdout').innerText   = "Hello, world!"; // ただしInternet ExplorerにはtextContentが無いため、innerTextを使用

print("Hello, world!"); // SpiderMonkeyなど

その他

/*
 * DOM以前のJavaScript
 */
var username = prompt("名前を入力して下さい", ""); // 入力を要求する
if ( username != "" ) { // 入力があった場合
    document.write(username, "さん、ようこそ!"); // 画面に出力
}else { // 入力がなかった場合
    document.write("名無しさん、ようこそ!"); // 画面に出力
}

/*
 * JavaScriptでの継承の方法
 */
function Dog() { // Dogクラスのコンストラクタ -- ただの関数である
    this.state     = "sitting";  // stateプロパティを設定
    this.showState = function(){ // showStateメソッドを定義
        alert("I am " + this.state + ".");
    };
}
var hachi = new Dog(); // Dogクラスからインスタンスhachiを生成
hachi.showState();     // "I am sitting." が出力される
function LazyDog() { // LazyDogクラスのコンストラクタ
    this.state = "sleeping..."; // stateプロパティをオーバーライド
}
LazyDog.prototype = new Dog(); // LazyDogはDogを継承(インスタンスを継承することに注意)
var pochi = new LazyDog(); // LazyDogからインスタンスpochiを作成
pochi.showState();         // "I am sleeping..." が出力される。

JavaScriptでは、クラスはコンストラクタによって定義される。プロトタイプベースのオブジェクト指向プログラミング言語では、原型(プロトタイプ)となるインスタンスを継承して新しいクラスを作る。そのため、継承を行うには少なくとも1つのインスタンスを生成する必要がある。

DOM

DOMとは、HTMLやXHTML (XML) で書かれたドキュメントにアクセスするためのAPIである。DOMは多くのプログラミング言語でライブラリやモジュールとして実装されているが、ウェブブラウザと統合しているJavaScriptの処理系では特に言語仕様として組み込まれており。(ただし、SpiderMonkeyなど単体のJavaScriptエンジンには組み込まれていない)、DOMオブジェクトを介してアクセスできる。

バージョンとブラウザの対応表

041.png

JavaScriptライブラリ

代表的なJavaScriptライブラリは以下のとおり。
  • AJAJA
  • AngularJS
  • Dojo Toolkit
  • Ext JS
  • Google Closure Tools
  • game.js
  • Google Web Toolkit (GWT)
  • Impact
  • jQuery
  • mario.js
  • MochiKit
  • MooTools
  • Prototype JavaScript Framework (prototype.js)
  • script.aculo.us
  • Spry
  • The Yahoo! User Interface Library (YUI)

「プログラム言語」の用語

「アルゴリズムとプログラミング」の他の分野

「テクノロジ系」の他のカテゴリ

このページのWikipediaよりの記事は、ウィキペディアの「JavaScript」(改訂履歴)の記事を複製、再配布したものにあたり、このページ内の該当部分はクリエイティブ・コモンズ 表示 - 継承 3.0 非移植 ライセンスの下 に提供されています。


Pagetop