JavaScript
出典: フリー百科事典『ウィキペディア(Wikipedia)』
JavaScript(ジャバスクリプト、ジャヴァスクリプト、略称:JS)はインタプリタ方式のスクリプト言語である。主にWebブラウザ上で動作し、HTMLの動的書き換えや入力フォームの自動補完など、Webページの使用感向上を目的として使用される。
文法はプロトタイプベースのオブジェクト指向型である。多くの場合は、C言語に似た手続き型言語のようなスタイルで書かれるが、関数型言語とも多くの類似点がある。近年ではその柔軟な設計が評価され、様々なアプリケーションで自動実行の用途におけるマクロ言語としても採用されている。
なおJavaとScriptの間は詰めて表記する。Java言語と名前や文法が似ているためしばしば混同されるが、互換性は全くない。Javaと呼ぶ場合はもっぱらJava言語を指すので注意が必要。名前の由来については#誕生を参照。
目次 |
[編集] 歴史
[編集] 誕生
JavaScriptはネットスケープコミュニケーションズのBrendan Eichによって開発され、Netscape Navigator 2.0 で実装された。開発当初は「LiveScript」と呼ばれていたが、1995年にSun Microsystems社の開発したプログラミング言語「Java言語」が当時大きな注目を浴びており、これに便乗したネットスケープ社のマーケティング的な思惑が働き「JavaScript」という名前に変更されたといわれている[要出典]。 1996年にマイクロソフトのInternetExplorer3.0に搭載されるようになると、その手軽さからJavaScriptは急速に普及していく。1997年、通信に関する標準を策定する国際団体Ecma Internationalによって JavaScript の中核的な仕様がECMAScriptとして標準化され (ECMA 262, ISO/IEC 16262, JIS X 3060)、多くの Webブラウザで利用できるようになった。
[編集] 不遇の時代
1990年代後半にMicrosoftのInternetExplorer、NetscapeのNetscape Navigator間で勃発した、いわゆる第一次ブラウザ戦争では、両ブラウザが独自の拡張を施し様々な仕様が乱立する事態に発展した。ブラウザに関するセキュリティ意識も今日程高くなく、JavaScriptに関する脆弱性が次々と発見されることになる。また、初心者でも比較的容易にプログラムが書けることが、JavaScriptの言語仕様及びその周辺技術に精通していない利用者が増える原因ともなった。さらにその名称から、Javaのサブセットや下位バージョンの様な印象を一部の人間に与えたことも事実である。以上の様な理由から各ブラウザ上での挙動に差異が出たり、必要以上に「アマチュアが使うもの」「低機能な言語」と捉えられてしまうことになる。
[編集] 現在のJavaScript
市場のブラウザ間互換性がある程度確立された2000年頃にはGoogleやAmazon等の大手企業もJavaScriptを積極的に利用し始めた。代表的なものとしてはGoogle マップ[1]やAmazon Diamond Search[2]等がある。2005年、JavaScriptの非同期通信を利用した技術にAjaxという名前がつけられたことによって、高機能なWebアプリケーションの開発言語の一つとして再び注目を集めている。しかし今も尚、JavaScriptによる脆弱性や攻撃は存在しており、状況が本質的に変わった訳ではない。
また、最近ではMozilla Firefox用拡張機能のGreaseMonkeyやOperaの標準機能などにおいて、「User JavaScript」と呼ばれる、JavaScriptを使ったWeb表示のカスタマイズ機能が使用可能なWebブラウザも出てきている。
[編集] JavaScript 2.0
2000年~2003年にかけて、JavaScript 2.0 を作ろうとした動きがあったが、ネットスケープコミュニケーションズとマイクロソフトの対立でまとまらなかった。当時ネットスケープコミュニケーションズが提案していた案がアドビの ActionScript 2.0 に引き継がれ、マイクロソフトの案が JScript .NET へと引き継がれた。2006年現在 ECMAScript 4 の策定が進められており、Mozilla Foundation はこれに基づいて JavaScript 2.0 を作成することを表明している。また、Mozilla は ECMAScript 4 の策定にあたって Python のよさを取り込んだ案を提案しており、自身でもこれを実装している。
[編集] セキュリティ上の制限
JavaScriptだけでは、異なるドメイン間のファイルにアクセスする事が出来ない。JavaScriptを用いたクロスドメイン通信を行うためには、間にサーバサイドプログラムを挟むなどの工夫が必要となる。
[編集] 問題点
- 悪意のあるユーザによってクロスサイトスクリプティングや、ブラウザクラッシャー等の危険性のあるページが生成される可能性がある。
- ブラウザ間の、言語仕様そのものの実装に関する互換性は極めて高く、DOMなど関連仕様の実装に関する互換性も比較的高い。しかし、単純な装飾処理や入力チェック等は比較的安易に導入できるため、現状では利用者の多くが言語仕様やDOM仕様、ブラウザベンダの提供する技術文書等に目を通さずに使用している。このため各利用者の使用法に大きな癖があることが多い。ベンダにとっては新しいブラウザの開発にあたり、現存するWebページの大半が問題なく表示・動作可能な製品を提供することも使命であるため、この実情がブラウザ間での完全な互換性を確立することを困難にしている。
- ライブラリを作り難い。数多くの試みがあるが、有用なものは多くなく、大半は名前空間を汚すだけの結果になっている。HTMLやXMLでの使用に限れば、HTCやXBLに頼ることでライブラリ作成はかなり容易になるが、あまり利用されていない。
- 1999年のECMA262-3以来、数えるほどのベンダ独自拡張があっただけで、言語仕様自体の変更は無かったと言える。しかし、XULでの使われ方や、Ajaxと呼ばれる使われ方など、複数の人間が長期間携わって作り管理するようなものが目に付くようになってきている。現在の言語仕様に限界が見えてきているわけではないが、より楽な管理を実現する為に、言語仕様改訂を待ち望む声は少なくない。
[編集] サンプルコード
js> print("Hello, JavaScript.") // print は実装次第。 Hello, JavaScript. js> a = 1; typeof a number js> a = "1"; typeof a string js> a = true; typeof a boolean js> a = function () {}; typeof a function js> a = {}; typeof a object js> a = []; typeof a object js> a = null; typeof a object js> delete a; typeof a undefined js> a = XML("<a/>"); typeof a xml
// ブラウザに実装され、多数の拡張が施されたJavaScriptが一般に使用される。 alert("Hello, JavaScript."); var userName; //変数宣言。必須ではない。 userName = prompt("名前を入力して下さい",""); //入力を要求する if(userName != "") { //名前の入力があった場合 document.write(userName, "さん、ようこそ!"); //画面に出力 } else { //名前の入力がなかった場合 document.write("名無しさん、ようこそ!"); //画面に出力 }
//JavaScriptでの継承の方法 var Dog = function() {}; //Dogクラスを作成 Dog.prototype.sit = "I am sitting."; //Dogにsitプロパティを追加 var myDog = new Dog(); //DogからインスタンスmyDogを作成 alert(myDog.sit); //“I am sitting.”が出力される。 var Dog2 = function() {}; //Dog2クラスを作成 for (var prop in Dog.prototype) { //Dogから全プロパティを継承 Dog2.prototype[prop] = Dog.prototype[prop]; } var myDog2 = new Dog2(); //Dog2からインスタンスmyDog2を作成 alert(myDog2.sit); //“I am sitting.”が出力される。 /* JavaScriptでは、クラスは関数を定義するように作成し、 作成したクラスやインスタンスはすべてオブジェクトと呼ぶ。 */
[編集] 主な実装
[編集] 主な開発環境
[編集] 外部ライブラリ
以下に、JavaScriptで比較的有名だと思われるライブラリを挙げる。
[編集] 関連するプログラミング言語
- ECMAScript
- JScript
- ActionScript
- VBScript
- Java言語(JavaScriptと名称は似ていて間違えやすいが、文法が多少似ているのみで、違う言語)
[編集] 関連項目
[編集] 外部リンク
- Core JavaScript 1.5 Reference
- Core JavaScript 1.5 ガイド
- Client-Side JavaScript Guide - Netscape Devedge (window,document等のWebブラウザに特有のオブジェクトの使い方)
- Yahoo! JavaScript カテゴリ
- Open Directory - JavaScript カテゴリ
- Javascript Tutorials
- Firecat - Server-Side JavaScript ウェブサーバー
[編集] 特記事項
特に断りが無い限り、HTMLのscript要素でウェブページに埋め込み可能な、ECMAScript互換の言語についての説明である。具体的には、JavaScript 1.0-1.7, JScript 1.0-5.7 を指す。
カテゴリ: 出典を必要とする記事 | JavaScript | スクリプト言語