ソースを表示
出典: Wikipedio
JavaScript
のソース
移動:
ナビゲーション
,
検索
以下に示された理由によりページの編集を行うことができません:
この処理は
登録利用者
の権限を持った利用者のみが実行できます。
以下にソースを表示しています:
{{Infobox プログラミング言語 | name = JavaScript | file ext = .js | paradigm = [[マルチパラダイムプログラミング言語|マルチパラダイム]] | released = [[1995年]] | designer = [[ブレンダン・アイク]] | developer = [[ネットスケープコミュニケーションズ]]、[[Mozilla Foundation]] | latest release version = 1.8 | latest release date = [[2008年]] | latest preview version = 1.9.3 | latest preview date = [[2010年]] | typing = [[ダック・タイピング]] | implementations = [[WebKit#JavaScriptCore|JavaScriptCore]]、[[KJS]]、[[Nitro]]、[[Rhino]]、[[SpiderMonkey]]、[[Google V8 JavaScript Engine|V8]]ほか | dialects = [[JScript]] | influenced by = [[C言語]]、[[Java]]、[[Perl]]、[[Python]]、[[Scheme]]、[[Self]] | influenced = [[Objective-J]] | operating system = [[クロスプラットフォーム]] | wikibooks = JavaScript }} '''JavaScript'''(ジャバスクリプト)とは、[[オブジェクト指向プログラミング|オブジェクト指向]][[スクリプト言語]]である。主に[[ウェブブラウザ]]などの[[クライアントサイド]]で実装され、動的なウェブサイトの構築や、[[リッチインターネットアプリケーション|RIA]]などの高度な[[ユーザインタフェース]]の開発に用いられる。 == 特徴 == JavaScriptは[[プロトタイプベース]]のオブジェクト指向[[プログラミング言語]]である。多くの場合は[[C言語]]に似た[[手続き型言語]]のようなスタイルで書かれるが、[[第一級関数]]をサポートしている(関数を[[第一級オブジェクト]]として扱える)など、[[関数型言語]]の性質も持ち合わせている。そのような柔軟な設計から、いくつかの[[アプリケーションソフトウェア|アプリケーション]]では[[マクロ言語]]としても採用されている<ref>例えば[[Adobe Acrobat]]は、JavaScriptによるマクロ機能を搭載している。</ref>。 [[Aptana]]や[[Eclipse_(統合開発環境)|Eclipse]]、[[NetBeans]]、[[IntelliJ IDEA]]などの統合開発環境はJavaScriptをサポートしており、大規模開発が可能になっている。また各処理系の実装の違いによる互換性の問題は、[[Prototype JavaScript Framework]]などのJavaScriptライブラリが吸収することにより解決が図られている。さらに[[Ext JS]]などの本格的な[[グラフィカルユーザインタフェース|GUI]]ライブラリの登場により、デスクトップアプリケーションと遜色ないユーザインタフェースの構築が可能になった。 また、[[:en:DWR (Java)|Direct Web Remoting]] (DWR) などの技術の発達により[[クライアントサーバモデル|クライアント・サーバ]]間の通信が著しく容易になったことや、[[Jetty]]などのアプリケーションサーバが[[Comet]]利用時のメモリ使用量の削減を実現したため、サーバからクライアントへの情報のプッシュ型の配信が実用的となった。 しばしば混同されるが、プログラミング言語'''[[Java]]'''は'''JavaScript'''とは別物である。ただし、JavaScriptからJavaクラスのメソッドを呼び出すことができる[[:en:LiveConnect|LiveConnect]]インタフェース([[Netscapeシリーズ|Netscape]] 4で実装されたが、[[Mozilla]] 2.0で削除)など、JavaはJavaScriptに影響を与えた。 == 歴史 == === 誕生 === JavaScriptは[[ネットスケープコミュニケーションズ]]の[[ブレンダン・アイク]]によって開発され、[[Netscape Navigator (ネットスケープコミュニケーションズ)|Netscape Navigator]] 2.0で実装された。開発当初は''LiveScript''と呼ばれていたが、[[1995年]]に[[サン・マイクロシステムズ]](現・[[オラクル]])が開発したプログラミング言語Javaが当時大きな注目を浴びており、ネットスケープとサン・マイクロシステムズが業務提携していた事もあったため、''JavaScript''という名前に変更された<ref>{{cite web|title= INNOVATORS OF THE NET: BRENDAN EICH AND JAVASCRIPT|url=http://wp.netscape.com/columns/techvision/innovators_be.html|author=Marc Andreessen|accessdate=1月22日|accessyear=2008年}}</ref><ref name="newsrelease67">{{cite web|title=NETSCAPE AND SUN ANNOUNCE JAVASCRIPT, THE OPEN, CROSS-PLATFORM OBJECT SCRIPTING LANGUAGE FOR ENTERPRISE NETWORKS AND THE INTERNET|url=http://wp.netscape.com/newsref/pr/newsrelease67.html|accessyear=2008年|accessdate=1月22日}}</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の策定により実装間の互換性は向上し、[[Document Object Model|DOM]]など関連仕様の実装に関する互換性も比較的高くなっている。ただ、現在でも特定のブラウザでしか実行できないECMAScript以前の古い構文や、ブラウザ独自のDOMを使ったコードが使用されている場合があり、互換性の問題が完全に解消されたわけではない。 === 現在 === 市場のブラウザ間互換性がある程度確立された[[2000年]]頃には、[[Google]]や[[Amazon.com|Amazon]]等の大手企業もJavaScriptを積極的に利用し始めた。[[2005年]]、マイクロソフトが開発したJavaScriptの非同期通信を利用した技術に'''[[Ajax]]'''という名前が付けられたことによって、高機能なウェブアプリケーション開発言語の一つとして再び注目を集めた。Ajaxを利用している代表的なアプリケーションとして、[[Google マップ]][http://maps.google.co.jp/]や[[Amazon Diamond Search]][http://www.amazon.com/gp/gsl/search/finder/]などがある。 また最近では、[[Mozilla Firefox]]用[[拡張機能 (Mozilla)|アドオン]]の[[Greasemonkey]]や[[Opera]]の標準機能、[[Google Chrome]]のエクステンションなどにおいて、「ユーザスクリプト」と呼ばれるウェブページ読み込み時に実行できるJavaScriptアプリケーションが登場している。 以前は[[インタプリタ]]方式で実行されることが一般的であったため、実行速度はさほど速くなかったが、現在では[[ジャストインタイムコンパイル方式|JITコンパイル]]などを利用した各種の最適化がなされており、各ウェブブラウザのベンダーともに高速化を図ってしのぎを削っている。[[ジャストインタイムコンパイル方式#JavaScriptのJITコンパイラ|JavaScriptのJITコンパイラ]]も参照。 === JavaScript 2.0 === 2000年から2003年にかけて、現在のJavaScriptの後継バージョンとなるJavaScript 2.0を作ろうとした動きがあったが、ネットスケープとマイクロソフトの対立でまとまらなかった。当時ネットスケープが提案していた案は[[アドビシステムズ|アドビ]]の[[ActionScript]] 2.0に引き継がれ、マイクロソフトの案は[[JScript#JScript .NET|JScript .NET]]へと引き継がれた。その後ECMAScript 4の策定が進められ、2006年の時点で[[Mozilla Foundation]]はこれに基づいてJavaScript 2.0を作成することを表明していた。MozillaはECMAScript 4の策定にあたって、[[Python]]の文法を一部取り込んだ案を提案しており、自身でもこれを実装している<ref>{{cite web | date = 2006-02-19 | url = http://weblogs.mozillazine.org/roadmap/archives/2006/02/js_and_python_news.html | title = Python and JavaScript | work = Brendan's Roadmap Updates | language = 英語 | accessdate = 9月5日 | accessyear = 2007年 }} </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>[http://journal.mycom.co.jp/news/2008/08/18/027/index.html JavaScript 2.0はECMAScript 3.1ベースに、ECMAScript 4は譲歩] - マイコミジャーナル</ref> == セキュリティ上の制限 == 通常のウェブブラウザの実装における[[XMLHttpRequest]]やインラインフレームを使った通信では、セキュリティ上の制限から他のドメインのリソースにアクセスすることができない([[:en:Same origin policy|同一生成元ポリシー]])。そのため、必要な場合には一種の[[プロキシ|プロキシサーバ]]を介してアクセスする手法、[[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"> // <div id="stdout"></div>という要素が存在するとして… 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や[[Extensible HyperText Markup Language|XHTML]] ([[Extensible Markup Language|XML]]) で書かれたドキュメントにアクセスするための[[Application Programming Interface|API]]である。DOMは多くのプログラミング言語でライブラリやモジュールとして実装されているが、ウェブブラウザと統合しているJavaScriptの処理系では特に言語仕様として組み込まれており(ただし、[[SpiderMonkey]]など単体のJavaScriptエンジンには組み込まれていない)、DOMオブジェクトを介してアクセスすることができる。 == バージョンとブラウザの対応表 == {| class="wikitable" border="1" style="font-size: smaller; text-align: center;" |- ! バージョン !! 日付 !! 規格 !! Netscape<br />Navigator !! Mozilla<br />Firefox !! Internet<br />Explorer !! Opera !! Safari !! Google<br />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 1<sup>st</sup> edition / ECMA-262 2<sup>nd</sup> edition || 4.06-4.7x || || 4.0 || || || |- | 1.4 || || || Netscape<br />Server || || || || || |- | 1.5 || 2000年11月 || ECMA-262 3<sup>rd</sup> edition || 6.0 || 1.0 || 5.5 (JScript 5.5),<br />6 (JScript 5.6),<br />7 (JScript 5.7),<br />8 (JScript 5.8) || 6.0,<br />7.0,<br />8.0,<br />9.0<br /> || || |- | 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>{{cite web|author=後藤大地 |url=http://journal.mycom.co.jp/news/2009/12/09/030/?rt=na |title=JavaScriptのブラウザ非互換に解決のみとおし |publisher=journal.mycom.co.jp |date=2009-12-09 |accessdate=2009-12-09}}</ref> Compliance || || 4 || || || || |} <ref>{{cite web|author=John Resig |url=http://ejohn.org/blog/versions-of-javascript |title=Versions of JavaScript |publisher=Ejohn.org |date= |accessdate=2009-05-19}}</ref> == JavaScriptライブラリ == <!-- ウィキペディアに記事がある -->代表的なJavaScriptライブラリは以下のとおり。 * [[AJAJA]] * [[:en:Dojo Toolkit|Dojo Toolkit]] * [[Ext JS]] * [[:en:Google Closure Tools|Google Closure Tools]] * [[Google Web Toolkit]] (GWT) * [[jQuery]] * [[MochiKit]] * [[MooTools]] * [[Prototype JavaScript Framework]] (prototype.js) * [[:en:script.aculo.us|script.aculo.us]] * [[Spry]] * [[:en:Yahoo! UI Library|The Yahoo! User Interface Library]] (YUI) == 関連項目 == * [[ECMAScript]] ** [[ActionScript]] ** [[DMDScript]] ** [[JScript]] ** [[VBScript]] * [[Document Object Model]] (DOM) - [[ダイナミックHTML]] - [[スタイルシート]] * [[Ajax]] * [[JavaScript Object Notation]] (JSON) - JavaScriptにおけるオブジェクトの記法をベースとした軽量な[[データ記述言語]]。 * [[JSONP]] * [[ブックマークレット]] == 脚注 == <references/> == 外部リンク == {{Wikibooks}} * 英語 ** [http://www.ecma-international.org/publications/standards/Ecma-262.htm Standard ECMA-262] ** [https://developer.mozilla.org/en/JavaScript JavaScript - MDC] * 日本語 ** [https://developer.mozilla.org/ja/JavaScript JavaScript - MDC] [[Category:JavaScript|*]] [[Category:スクリプト言語]] [[af:JavaScript]] [[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]]
このページで使われているテンプレート:
Template:Cite web
Template:Infobox プログラミング言語
Template:Wikibooks
JavaScript
に戻る。
表示
本文
ノート
ソースを表示
履歴
個人用ツール
ログイン
ナビゲーション
メインページ
コミュニティ・ポータル
最近の出来事
最近更新したページ
おまかせ表示
ヘルプ
検索
ツールボックス
リンク元
リンク先の更新状況
特別ページ