JavaScript
出典: Wikipedio
|
Template:Infobox プログラミング言語 JavaScript(ジャバスクリプト)とは、オブジェクト指向スクリプト言語である。主にウェブブラウザなどのクライアントサイドで実装され、動的なウェブサイトの構築や、RIAなどの高度なユーザインタフェースの開発に用いられる。
目次 |
特徴
JavaScriptはプロトタイプベースのオブジェクト指向プログラミング言語である。多くの場合はC言語に似た手続き型言語のようなスタイルで書かれるが、第一級関数をサポートしている(関数を第一級オブジェクトとして扱える)など、関数型言語の性質も持ち合わせている。そのような柔軟な設計から、いくつかのアプリケーションではマクロ言語としても採用されている<ref>例えばAdobe Acrobatは、JavaScriptによるマクロ機能を搭載している。</ref>。
AptanaやEclipse、NetBeans、IntelliJ IDEAなどの統合開発環境はJavaScriptをサポートしており、大規模開発が可能になっている。また各処理系の実装の違いによる互換性の問題は、Prototype JavaScript FrameworkなどのJavaScriptライブラリが吸収することにより解決が図られている。さらにExt JSなどの本格的なGUIライブラリの登場により、デスクトップアプリケーションと遜色ないユーザインタフェースの構築が可能になった。
また、Direct Web Remoting (DWR) などの技術の発達によりクライアント・サーバ間の通信が著しく容易になったことや、JettyなどのアプリケーションサーバがComet利用時のメモリ使用量の削減を実現したため、サーバからクライアントへの情報のプッシュ型の配信が実用的となった。
しばしば混同されるが、プログラミング言語JavaはJavaScriptとは別物である。ただし、JavaScriptからJavaクラスのメソッドを呼び出すことができるLiveConnectインタフェース(Netscape 4で実装されたが、Mozilla 2.0で削除)など、JavaはJavaScriptに影響を与えた。
歴史
誕生
JavaScriptはネットスケープコミュニケーションズのブレンダン・アイクによって開発され、Netscape Navigator 2.0で実装された。開発当初はLiveScriptと呼ばれていたが、1995年にサン・マイクロシステムズ(現・オラクル)が開発したプログラミング言語Javaが当時大きな注目を浴びており、ネットスケープとサン・マイクロシステムズが業務提携していた事もあったため、JavaScriptという名前に変更された<ref>Template:Cite web</ref><ref name="newsrelease67">Template:Cite web</ref>。
1996年にマイクロソフトのInternet Explorer 3.0に搭載されるようになると、その手軽さからJavaScriptは急速に普及していく。1997年、通信に関する標準を策定する国際団体EcmaインターナショナルによってJavaScriptの中核的な仕様がECMAScriptとして標準化され<ref>ECMA 262, ISO/IEC 16262, JIS X 3060</ref>、多くのウェブブラウザで利用できるようになった。
ネットスケープは、ウェブアプリケーション開発言語として自社のサーバ製品に実装したLiveWire JavaScriptも発表したが<ref name="newsrelease67" />、こちらはあまり普及しなかった。
JavaScriptの登場初期は、ブラウザベンダー間で言語仕様の独自拡張が行われていたため、ブラウザ間の互換性が極めて低かった。しかし現在では、ECMAScriptの策定により実装間の互換性は向上し、DOMなど関連仕様の実装に関する互換性も比較的高くなっている。ただ、現在でも特定のブラウザでしか実行できないECMAScript以前の古い構文や、ブラウザ独自のDOMを使ったコードが使用されている場合があり、互換性の問題が完全に解消されたわけではない。
現在
市場のブラウザ間互換性がある程度確立された2000年頃には、GoogleやAmazon等の大手企業もJavaScriptを積極的に利用し始めた。2005年、マイクロソフトが開発したJavaScriptの非同期通信を利用した技術にAjaxという名前が付けられたことによって、高機能なウェブアプリケーション開発言語の一つとして再び注目を集めた。Ajaxを利用している代表的なアプリケーションとして、Google マップ[1]やAmazon Diamond Search[2]などがある。
また最近では、Mozilla Firefox用アドオンのGreasemonkeyやOperaの標準機能、Google Chromeのエクステンションなどにおいて、「ユーザスクリプト」と呼ばれるウェブページ読み込み時に実行できるJavaScriptアプリケーションが登場している。
以前はインタプリタ方式で実行されることが一般的であったため、実行速度はさほど速くなかったが、現在ではJITコンパイルなどを利用した各種の最適化がなされており、各ウェブブラウザのベンダーともに高速化を図ってしのぎを削っている。JavaScriptのJITコンパイラも参照。
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の文法を一部取り込んだ案を提案しており、自身でもこれを実装している<ref>Template:Cite web </ref>。
しかしその後、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で導入された名前空間・パッケージなどの機能は導入されない。<ref>JavaScript 2.0はECMAScript 3.1ベースに、ECMAScript 4は譲歩 - マイコミジャーナル</ref>
セキュリティ上の制限
通常のウェブブラウザの実装におけるXMLHttpRequestやインラインフレームを使った通信では、セキュリティ上の制限から他のドメインのリソースにアクセスすることができない(同一生成元ポリシー)。そのため、必要な場合には一種のプロキシサーバを介してアクセスする手法、Adobe Flashを使う手法、動的にscript要素を生成する手法などが用いられる。JSONPも参照。
文法
Hello world
JavaScriptは言語仕様として標準ストリームを備えていないため、Hello worldプログラムの書き方は処理系によって異なる。
<source lang="javascript"> alert("Hello, world!"); // 警告を表示 </source>
<source lang="javascript"> console.log("Hello, world!"); // JavaScriptコンソールが有効な場合 </source>
<source lang="javascript"> document.write("Hello, world!"); // DOM以前のやや古い書き方 </source>
<source lang="javascript">
// という要素が存在するとして…document.getElementById('stdout').textContent = "Hello, world!"; // DOMを利用した書き方 document.getElementById('stdout').innerText = "Hello, world!"; // ただしInternet ExplorerにはtextContentが無いため、innerTextを使用 </source>
<source lang="javascript"> print("Hello, world!"); // SpiderMonkeyなど </source>
その他
<source lang="javascript"> /*
* DOM以前のJavaScript */
var username = prompt("名前を入力して下さい", ""); // 入力を要求する
if ( username != "" ) { // 入力があった場合
document.write(username, "さん、ようこそ!"); // 画面に出力
} else { // 入力がなかった場合
document.write("名無しさん、ようこそ!"); // 画面に出力
} </source>
<source lang="javascript"> /*
* 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..." が出力される。 </source>
JavaScriptでは、クラスはコンストラクタによって定義される。プロトタイプベースのオブジェクト指向プログラミング言語では、原型(プロトタイプ)となるインスタンスを継承して新しいクラスを作る。そのため、継承を行うには少なくとも1つのインスタンスを生成する必要がある。
DOM
DOMとは、HTMLやXHTML (XML) で書かれたドキュメントにアクセスするためのAPIである。DOMは多くのプログラミング言語でライブラリやモジュールとして実装されているが、ウェブブラウザと統合しているJavaScriptの処理系では特に言語仕様として組み込まれており(ただし、SpiderMonkeyなど単体のJavaScriptエンジンには組み込まれていない)、DOMオブジェクトを介してアクセスすることができる。
バージョンとブラウザの対応表
バージョン | 日付 | 規格 | Netscape Navigator | Mozilla Firefox | Internet Explorer | Opera | Safari | Google Chrome |
---|---|---|---|---|---|---|---|---|
1.0 | 1996年3月 | 2.0 | 3.0 | |||||
1.1 | 1996年8月 | 3.0 | ||||||
1.2 | 1997年7月 | 4.0-4.05 | ||||||
1.3 | 1998年10月 | ECMA-262 1st edition / ECMA-262 2nd edition | 4.06-4.7x | 4.0 | ||||
1.4 | Netscape Server | |||||||
1.5 | 2000年11月 | ECMA-262 3rd edition | 6.0 | 1.0 | 5.5 (JScript 5.5), 6 (JScript 5.6), 7 (JScript 5.7), 8 (JScript 5.8) | 6.0, 7.0, 8.0, 9.0 | ||
1.6 | 2005年11月 | 1.5 + Array extras + Array and String generics + E4X | 1.5 | 3.0, 3.1 | ||||
1.7 | 2006年10月 | 1.6 + Pythonic generators + Iterators + let | 2.0 | 3.2, 4.0 | 1.0 | |||
1.8 | 2008年7月 | 1.7 + Generator expressions + Expression closures | 3.0 | |||||
1.8.1 | 1.8 + Minor Updates | 3.5 | ||||||
1.9 | 1.8.1 + ECMAScript 5<ref>Template:Cite web</ref> Compliance | 4 |
<ref>Template:Cite web</ref>
JavaScriptライブラリ
代表的なJavaScriptライブラリは以下のとおり。
- AJAJA
- Dojo Toolkit
- Ext JS
- Google Closure Tools
- Google Web Toolkit (GWT)
- jQuery
- MochiKit
- MooTools
- Prototype JavaScript Framework (prototype.js)
- script.aculo.us
- Spry
- The Yahoo! User Interface Library (YUI)
関連項目
- ECMAScript
- Document Object Model (DOM) - ダイナミックHTML - スタイルシート
- Ajax
- JavaScript Object Notation (JSON) - JavaScriptにおけるオブジェクトの記法をベースとした軽量なデータ記述言語。
- JSONP
- ブックマークレット
脚注
<references/>
外部リンク
ar:جافا سكريبت bat-smg:JavaScript be:JavaScript be-x-old:JavaScript bg:JavaScript bug:JavaScript ca:JavaScript cs:JavaScript cv:JavaScript da:JavaScript de:JavaScript el:JavaScript en:JavaScript eo:JavaScript es:JavaScript et:JavaScript eu:JavaScript fa:جاوااسکریپت fi:JavaScript fr:JavaScript gl:JavaScript he:JavaScript hi:जावास्क्रिप्ट hr:JavaScript hu:JavaScript ia:JavaScript id:JavaScript is:JavaScript it:JavaScript jv:JavaScript ka:ჯავასკრიპტი km:JavaScript ko:자바스크립트 lt:JavaScript lv:JavaScript mk:ЈаваСкрипт ml:ജാവാസ്ക്രിപ്റ്റ് mn:JavaScript ms:JavaScript mzn:جاوااسکریپت nl:JavaScript no:JavaScript pl:JavaScript pt:JavaScript ro:JavaScript ru:JavaScript sah:JavaScript simple:JavaScript sk:JavaScript sl:JavaScript sq:JavaScript sr:Јаваскрипт sv:Javascript ta:யாவாசிகிரிப்டு tg:JavaScript th:จาวาสคริปต์ tr:JavaScript uk:JavaScript vi:JavaScript zh:JavaScript zh-yue:JavaScript