JavaScript

| ウィキペディアにおける各利用者のJavaScriptの使用法については、「Wikipedia:カスタムJS」をご覧ください。

|

| 「Java」とは異なります。

|

JavaScript

logo.jsによるJavaScriptの非公式ロゴ

パラダイム|  マルチパラダイム
登場時期|  1995年 (30年前) (1995)
設計者|  ブレンダン・アイク
開発者|  ネットスケープコミュニケーションズ、Mozilla Foundation
最新リリース|  ECMAScript 2024[1] / 2024年6月 (14か月前)
評価版リリース|  ECMAScript 2025[2] / 2024年3月27日 (16か月前)
型付け|  ダック・タイピング
主な処理系|  JavaScriptCore、KJS、Nitro、Rhino、SpiderMonkey、V8ほか
方言|  JScript
影響を受けた言語|  Scheme、Self、Java、Lua、Perl、AWK、HyperTalk、Python
影響を与えた言語|  Dart、Objective-J（フランス語版）、Google Apps Script、TypeScript
プラットフォーム|  クロスプラットフォーム
ウェブサイト|  www.ecma-international.org/publications-and-standards/standards/ecma-262/
拡張子|  `.js`、`.cjs`、`.mjs`
テンプレートを表示
HTML中のJavaScript。scriptタグで囲まれている。

JavaScript（ジャバスクリプト）は、プログラミング言語であり、HyperText Markup Language（HTML）やCascading Style Sheets（CSS）と並ぶ World Wide Web（WWW）の中核技術の一つである。JavaScriptで書かれたプログラムはHTMLやCSSと同様に、ウェブサービスのクライアントであるウェブブラウザ上で解釈、実行される。

プロトタイプベースのオブジェクト指向スクリプト言語であるが、クラスなどのクラスベースに見られる機能も取り込んでいる。

利用される場面はウェブサイト、ウェブアプリケーション、バックエンド、デスクトップアプリケーション、モバイルアプリケーションなど、ウェブブラウザからサーバ、デスクトップパソコンからスマートフォンまで多岐にわたっている。

Javaと似た名称を持つが、異なるプログラミング言語である（#歴史を参照）。

## 概要

[編集]

JavaScriptはWebブラウザNetscape Navigatorに起源を持ち、現在では様々な用途に利用されるプログラミング言語である。

JavaScriptの言語仕様はECMAScriptとして標準化され、実装は各種のJavaScriptエンジンによって提供されている。JavaScriptエンジンの例としてChromium系ブラウザのV8、Mozilla FirefoxのSpiderMonkey、SafariのJavaScriptCoreが挙げられる。

言語仕様を定義するECMAScriptのほかに、WebブラウザへアクセスするためのAPI仕様にDOMなどがある。これらはECMAScriptから独立しており、JavaScriptからも独立した概念である。

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

[編集]

JavaScriptは以下のような様々なスタイルのプログラミングが可能である。

* `if`・`for`などの制御構造による手続き型プログラミングスタイル
* `.prototype`・`class`などのオブジェクトによるオブジェクト指向プログラミングスタイル
* `map`・高階関数などの関数操作による関数型プログラミングスタイル

これらを可能にしているプログラミング言語としての特徴に、以下のことが挙げられる。オブジェクト指向の面では、JavaScriptのオブジェクトはクラスベースではなくプロトタイプベースである[注釈 1]。関数型の面では、第一級関数をサポートし関数を第一級オブジェクトとして扱える。

AptanaやEclipse, NetBeans, IntelliJ IDEAなどの統合開発環境はJavaScriptをサポートしており、大規模開発が可能になっている。さらにExt JSなどの本格的なGUIライブラリの登場により、デスクトップアプリケーションと遜色ないユーザインタフェースの構築が可能になった。

### 並行処理

[編集]

JavaScriptではしばしば、ネットワークを介したリクエストのような "待ち" がある処理を行う[注釈 2]。これに対処するために非同期処理をサポートし並行処理が可能となる。標準で用意されている処理機能にも非同期処理されるものがある。

非同期処理を記述する方法としてコールバック関数がある。JavaScriptはコールバック関数記法をラップする`Promise`、`Promise`を同期的なコードのように記述できるAsync/await構文をもつ。

またJavaScriptは並列処理による並行処理もサポートしている（下記参照）。

### 並列処理

[編集]

JavaScriptでは複数スレッドを用いた並列処理が可能である。共有メモリ上のバッファを表現する`SharedArrayBuffer`、バッファ操作オブジェクト`Atomics`が定義されている。スレッドそのものの仕様は環境ごとに異なる（ECMAScriptでは定義されていない）。ブラウザの場合は`Worker`、Node.jsの場合は`worker_threads`で定義されている。ただこの2環境ではほぼ共通の仕組みとなっており、例えば`postMessage`によるメッセージングが両者でサポートされている。

## 歴史

[編集]

### 誕生

[編集]

JavaScriptはネットスケープコミュニケーションズのブレンダン・アイクによって、1995年5月に10日間で開発された。上司からの指示に「Javaのような外観にしてくれ」「初心者に優しく」「Netscapeブラウザのほとんどなんでも制御できるように」との注文があった[3]。Netscape Navigator 2.0で実装された。

開発当初はLiveScriptと呼ばれていたが、1995年にサン・マイクロシステムズ（現・オラクル）が開発したプログラミング言語Javaが当時大きな注目を浴びており、ネットスケープとサン・マイクロシステムズが業務提携していた事もあったため、JavaScriptという名前に変更された[4][5]。最初のJavaScriptエンジンはブレンダン・アイクによりNetscape Navigatorのために作成されたものであった。このエンジンはSpiderMonkeyと呼ばれており、C言語で実装されていた。また、全てJavaで記述されたJavaScriptエンジンであるRhinoも同じくNetscapeのNorris Boyd（後にGoogleに移籍）らにより作成された。

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

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

JavaScriptの登場初期は、ブラウザベンダー間で言語仕様の独自拡張が行われていたため、ブラウザ間の互換性が極めて低かった。ECMAScriptの策定以降は実装間の互換性は向上し、DOMなど関連仕様の実装に関する互換性も高くなっていった。

かつてはJavaScriptという言葉が「ECMAScript標準」を指す、あるいは「独自実装を含んだ広義のJavaScript」を指し幅広い意味で使われていた。ゆえにどちらの意味でJavaScriptという言葉が使われているかは文脈で判断する必要があった[7]。たとえばかつてマイクロソフトによる実装はJScriptと呼ばれたが、JScriptをJavaScriptと呼ぶような場面があった。

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

実装間での差異を吸収するためにPrototype JavaScript Frameworkなどのライブラリが用いられた。

### 発展

[編集]

市場のブラウザ間互換性がある程度確立された2000年ごろには、GoogleやAmazonなどのGAFAMもJavaScriptを積極的に利用し始めた。

また、JavaScriptはウェブブラウザの拡張機能を開発するための言語としても使われるようになった。当初は拡張機能用のAPIが統一されていなかったが、互換性を高めようとする動きがある[9]。

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

### JavaScript 2.0

[編集]

次世代のJavaScriptとして、"JavaScript 2.0" を作ろうとした動きは二度あったが、いずれもまとまらなかった。

1度目はECMAScript 3が完成したのち2000年から2003年にかけて発生したが、ネットスケープとマイクロソフトの対立でまとまらなかった。当時ネットスケープが提案していた案はアドビのActionScript 2.0に引き継がれ、マイクロソフトの案はJScript .NETへと引き継がれた。

その後もネットスケープ及びMozilla FoundationはECMAScriptの策定に並行してJavaScriptを拡張し、JavaScript 1.x系列としてバージョンアップを繰り返していた。ECMAScript側ではECMAScript 4の策定が1999年以降進められており[10]、2006年の時点でMozilla Foundationはこれに基づいてJavaScript 2.0を作成することを表明していた。MozillaはECMAScript 4の策定にあたって、Pythonの文法を一部取り込んだ案を提案しており、自身でもこれを実装していた[11]。

しかしその後、ECMAScriptの標準化作業がMozilla, Adobe, Opera, Googleらが推す ECMAScript 4 と、Microsoft, Yahoo! らが推す ECMAScript 3.1 に事実上分裂してしまった影響から、2008年8月に大きな方針転換があり、ECMAScript 4は破棄され後者がECMAScript 5として2009年に標準化された。ECMAScript 4に入る予定だった機能は新たに発足した「ECMAScript Harmony」に先送りとなった[12]。これは後にECMAScript 2015として標準化が完了した。

なお、ECMAScript 5が標準化されて以降、MozillaのJavaScript実装はECMAScriptへの準拠を謳うようになった[13]。そしてバージョン番号での呼称は行われなくなり、JavaScript 2.0は事実上死語となった。

## 文法

[編集]

→詳細は「JavaScriptの文法（英語版）」を参照

### 基本的な文法

[編集]

JavaScriptの変数は `var`[14], `let`[15]および`const`[16] キーワードを使用して宣言できる。

let x; // 変数xの宣言。値が未指定のため、特殊な値である undefined が入った状態となる。
let y = 2; // 変数yの宣言。同時に 2 が代入される。
const z = 5; // 定数zの宣言。同時に 5 が代入される。定数であるため、書き換えることはできない。

上記例のスラッシュ2文字以降はコメントである。

JavaScriptは言語仕様にI/Oが組み込まれておらず、それらは実行環境により提供される。ECMAScript 5.1の仕様では以下のように言及されている。[17]

> この仕様の中では外部データの入力または計算結果の出力は供給しない。
>  (… indeed, there are no provisions in this specification for input of external data or output of computed results.)

しかし、ほとんどの実行環境はConsole Standard[18]で規定されている `console` オブジェクトを持っており[19]、そこにコンソール出力を行える。以下に最小のHello worldプログラムを示す。

console.log("Hello World!");

再帰関数は以下のように書ける。

function factorial(n) {
if (n == 0) {
return 1;

return n * factorial(n - 1);

無名関数（またはアロー関数）の構文とクロージャの例は以下である。

// ECMAScript 5以前の記法
var displayClosure = function() {
let count = 0;
// ECMAScript 2015以降で可能な記法
return ()=> {
return ++count;

var inc = displayClosure();
inc(); // 1 が返る
inc(); // 2 が返る
inc(); // 3 が返る

可変長引数は以下のように記述する[20]。

var sum = function(...args) {
let x = 0;
for (const v of args) {
x += v;

return x;

sum(1, 2, 3); // 6 が返る

即時実行関数式 (IIFE) の例。関数を用いることで変数をクロージャに閉じ込めることができる。

var v;
v = 1;
var getValue = (function(v) {
return function() {return v;};
})(v);

v = 2;

getValue(); // 1 が返る

### 複雑な例

[編集]

以下のサンプルコードは、様々なJavaScriptの機能を示したものである。

"use strict"; // strictモードの宣言
/* 2つの数値の最小公倍数を求める */
function LCMCalculator(x, y) { // コンストラクタ関数
const checkInt = (x)=> { // 入れ子の関数
if (x % 1 !== 0) {
throw new TypeError(x + " is not an integer"); // 例外のスロー

return x;

//   行末のセミコロンは省略可能な場合があるが、省略は推奨されない。
this.a = checkInt(x)
this.b = checkInt(y);

// オブジェクトのプロトタイプはコンストラクタ関数の prototype プロパティに格納する
LCMCalculator.prototype = { // オブジェクトリテラル
constructor: LCMCalculator, // このようにプロトタイプを上書きする場合は、
// constructorプロパティにコンストラクタ関数名を再指定する
gcd: function () { // 最大公約数を計算するメソッド
// 「ユークリッドの互除法」アルゴリズムで計算
let a = Math.abs(this.a), b = Math.abs(this.b);
if (a < b) {
// 変数の入れ替え
const t = b;
b = a;
a = t;

while (b !== 0) {
const t = b;
b = a % b;
a = t;

// 最大公約数の計算は一度でよいため、自分自身を計算済みの結果を返すメソッドで再定義（上書き）する。
// （これにより LCMCalculator.prototype.gcd の代わりに this.gcd が呼ばれるようになる。
//   ただし、計算後にプロパティ a や b が変更されてしまうと、結果は誤りとなる。）
// なお 'gcd' === "gcd", this['gcd'] === this.gcd である。
this['gcd'] = function () {
return a;

return a;

lcm : function () { // 最小公倍数を計算するメソッド
// 変数名は、オブジェクトのプロパティと衝突しない。例）lcm は this.lcm とは異なる。
// 以下では、浮動小数の精度の問題を避けるために this.a * this.b としていない。
const lcm = this.a / this.gcd() * this.b;
// 最小公倍数の計算も一度でよいため、自分自身を計算済みの結果を返すメソッドで再定義（上書き）する。
this.lcm = function () {
return lcm;

return lcm;

toString: function () { // toStringはオブジェクトを文字列に変換するときに呼ばれるメソッド。
// テンプレート文字列により文字列中に値を埋め込むことができる。
return `LCMCalculator: a = ${this.a}, b = ${this.b}`;

// 汎用の出力関数の定義。この実装はWebブラウザ上でのみ動作する。
function output(x) {
document.body.appendChild(document.createTextNode(x));
document.body.appendChild(document.createElement('br'));

// 無名関数はさまざまな書き方が可能
[[25, 55], [21, 56], [22, 58], [28, 56]].map(([a, b])=> new LCMCalculator(a, b)) // 配列リテラル + マッピング関数
.sort((a, b)=> a.lcm() - b.lcm()) // 指定した比較関数を用いたソート
.forEach(obj=> {
output(obj + ", gcd = " + obj.gcd() + ", lcm = " + obj.lcm());
});

上記コードをウェブブラウザ上で実行すると、以下の結果が表示される。

LCMCalculator: a = 28, b = 56, gcd = 28, lcm = 56
LCMCalculator: a = 21, b = 56, gcd = 7, lcm = 168
LCMCalculator: a = 25, b = 55, gcd = 5, lcm = 275
LCMCalculator: a = 22, b = 58, gcd = 2, lcm = 638

## 機能

[編集]

### グローバルオブジェクト

[編集]

JavaScriptはコードの最上階層に属するグローバルオブジェクトを提供している。JavaScriptにおけるグローバルオブジェクトは`globalThis`である[21]。

## エコシステム

[編集]

### 実行環境API

[編集]

それぞれのJavaScript実行環境において様々なAPIが存在しており、JavaScriptからそれらを呼び出すことができる。

#### Webブラウザ

[編集]

HTML要素をJavaScriptから操作するためのDOM API（例: `document.querySelector`）、HTTPリクエストを送信するFetch API、マルチスレッドを可能にするWeb Workerなどが定義されている。これらは言語仕様であるECMAScriptからは独立した各々の仕様書でAPIが定義され、ブラウザ実装がJavaScriptバインディングを提供することでJavaScriptからの呼び出しが可能になっている。

#### Node.js

[編集]

ファイルシステムにアクセスするための`fs` API（モジュール）や実行プロセスと相互作用する`process` APIなどが定義されている。Webブラウザがもつ強いサンドボックス要件が緩和されている点がNode.js APIの特徴の1つである。

### altJS

[編集]

alternative JavaScript (altJS) はJavaScriptへトランスパイルされるプログラミング言語の総称である。

JavaScriptへ新たな機能を追加する方法の1つに、新しい言語を定義しそのコードをJavaScriptへ変換する方法がある。そのようなJavaScriptへトランスパイルされる言語はaltJSと総称される。altJSの例としてCoffeeScriptやTypeScript、PureScriptが挙げられる。altJSを用いることで、新たな演算子や記法を導入し効率の良いJavaScript開発を行うことができる。素のJavaScriptはaltJSと対比してVanilla JSとしばしば呼ばれる[22]。

例えば、altJSの1つであるTypeScriptは型の導入を可能にする。JavaScriptは動的型付けであり、静的コード解析でJavaScriptコードへの型検査は実行可能だが、コード上に型表記をおこなうことはできないため、完全な型検査を行うことは難しい。TypeScriptはJavaScriptへ型ノーテーションを導入しトランスパイル時に型検査をおこなうことで、型をもったJavaScriptを実現している。

### パッケージ管理

[編集]

JavaScriptエコシステムには多様なライブラリ（パッケージ）が存在する。パッケージの導入・バージョン調整・廃棄を担う管理ソフトウェアとして`npm`や`yarn`がある。

## 利用

[編集]

WebブラウザにおけるHTML操作を目的として作られたJavaScriptは、2020年現在幅広い領域で利用されている。

* ウェブページ・ウェブサイト・ウェブアプリケーション（ブラウザクライアント上での動作）
* ウェブバックエンドサーバ (Node.js)
* デスクトップアプリケーション（例: Electron (ソフトウェア)）
* モバイルアプリケーション (例: React Native)

### Webページでの利用

[編集]

→「ダイナミックHTML」、「Ajax」、および「Document Object Model」も参照

JavaScriptの最も歴史の長い使用法はHTMLページにクライアント側のふるまいを持たせることである。これは当初はダイナミックHTML (DHTML) として知られていた。JavaScriptはHTMLに直接埋め込まれまたは別のファイルからインクルードされ、Webブラウザ上のJavaScript実行環境で動作する。Webブラウザは通常、Document Object Model (DOM) を扱うためのホストオブジェクトを提供する。

JavaScriptの使用例としては、以下のようなものがある。

* ページの再読み込みなしで新しいコンテンツを読み込むまたはサーバに投稿する（Ajax。例えば、SNSでページを離れることなく新しい投稿を表示することができる）。
* ゲームなどの動的なコンテンツを提供する。
* データをサーバーに送信せずにフォーム入力値の検証を行う。
* アクセス解析や広告追跡（英語版）、パーソナライゼーションなどのためにユーザーの閲覧情報を収集する[23]。

JavaScriptはユーザーのブラウザ上で動作できることから、ユーザーの操作に対して素早く反応することができ、アプリケーションをよりレスポンシブにすることができる。さらにJavaScriptはHTML単独では対応できない操作、例えばキー入力などにも応答することができる。Gmailのようなアプリケーションでは、JavaScriptでUIロジックを実装し、さらにJavaScriptでサーバから情報（例えばeメールのメッセージ）を取得することで、こうしたメリットを享受している。このような利点からAjaxは大きなトレンドとなった[要出典]。

様々な言語やフレームワークをウェブブラウザ上で動作させるために、JavaScriptはそれらのコンパイル先出力言語となっている（例: TypeScript）。

#### 例

[編集]

以下はJavaScriptとDOMを含むWebページのごく単純な例である。

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8" />
<title>単純な例</title>
</head>
<body>
<h1 id="header">これはJavaScriptです</h1>
<script>
document.body.appendChild(document.createTextNode('Hello World!'));

let h1 = document.querySelector('#header'); // id='header'の<h1>要素の参照を取得。
h1 = document.querySelectorAll('h1')[0]; //または<h1>要素を全て取得してそこから先頭を取得。
</script>
<noscript>お使いのブラウザはJavaScriptをサポートしていないか、無効になっています。</noscript>
</body>
</html>

### その他の環境での利用

[編集]

ウェブブラウザ以外のJavaScript実行環境も存在する（サーバーサイドJavaScript実装の一覧（英語版）を参照）。データベースやWebサーバに組み込まれ、それらのAPIやHTTPリクエストやレスポンスのアクセスが提供されているものもある。

また、Node.jsのようにOSの機能（ネットワークやファイルシステムなど）にアクセスできる環境も存在する。加えてElectronなどのアプリケーションフレームワークの登場により、Atomなどのアプリケーションが広まりつつある。

いくつかのアプリケーションではマクロ言語としても採用されている。例えばAdobe Acrobatは、JavaScriptによるマクロ機能を搭載している。

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

[編集]

→「ECMAScript § バージョン」も参照

バージョン | 日付 | 規格 | Netscape
Navigator | Mozilla
Firefox | Internet
Explorer | Opera | Safari

|
|
|
|
|
|
|

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 | 5.0 |
1.4 |  |  | Netscape
Server |  |  | 6.0 |
1.5 | 2000年11月 | ECMA-262 3rd edition | 6.0 | 1.0 | 5.5 (JScript 5.5),
6.0 (JScript 5.6),
7.0 (JScript 5.7),
8.0 (JScript 6.0) |  |
1.6 | 2005年11月 | 1.5 + Array extras + Array and String generics + E4X | 7.0-8.0 | 1.5 |  | 7.0-9.0 | 3.0, 3.1
1.7 | 2006年10月 | 1.6 + Pythonic generators + Iterators + let |  | 2.0 |  |  | 3.2-5.1
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[24] Compliance |  | 4.0-11.0 |  |  |

[25]

## ライブラリ

[編集]

代表的なJavaScriptライブラリは以下のとおり。

* AngularJS
* Backbone.js
* Dojo Toolkit
* Express.js
* Ext JS
* Google Web Toolkit (GWT)
* Impact
* jQuery
* MochiKit
* MooTools
* Prototype JavaScript Framework (prototype.js)
* QUnit
* Yahoo!ユーザーインターフェイスライブラリ
* WinJS
* React
* Vue.js

## 商標

[編集]

「JavaScript」は米国では、米国オラクルの商標である[26][27][28]。この商標はもともと1997年5月6日にサン・マイクロシステムズに発行され、2009年にオラクルがサンを買収した際に譲渡された[29]。

2024年9月にはライアン・ダールが先頭に立ってオラクルにJavaScript商標の解放を求める書簡が回覧された[30]。JavaScriptの生みの親であるブレンダン・アイクもこの取り組みを支持した14,000人以上の署名者の1人だった。

## 脚注

[編集]

[脚注の使い方]

### 注釈

[編集]

1. ^ 新しい (ES2015以降) JavaScriptではクラスの構文によりプロトタイプを意識せずにオブジェクト指向プログラミングをすることが可能になったが、言語設計はプロトタイプベースの設計を維持している。
2. ^ もしも待ちの間にプログラムを停止/sleep させると、その間に他の処理をそのスレッドで行うことが出来ない（ブロッキング）。もしネットワークリクエストが返ってくるまでブロッキングしたとすると、その間ブラウザのレンダリングも停止してしまう。

### 出典

[編集]

1. ^ "ECMAScript® 2024 Language Specification"; 閲覧日: 2024年8月30日; 出版日: 6月 2024.
2. ^ "ECMAScript® 2025 Language Specification"; 閲覧日: 2024年4月17日; 出版日: 2024年3月27日.
3. ^ Effective JavaScript（翔泳社、2013）iii。
4. ^ Marc Andreessen. “INNOVATORS OF THE NET: BRENDAN EICH AND JAVASCRIPT”. 2008年7月4日時点のオリジナルよりアーカイブ。2008年1月22日閲覧。
5. ^ a b “NETSCAPE AND SUN ANNOUNCE JAVASCRIPT, THE OPEN, CROSS-PLATFORM OBJECT SCRIPTING LANGUAGE FOR ENTERPRISE NETWORKS AND THE INTERNET”. 2008年5月28日時点のオリジナルよりアーカイブ。2008年1月22日閲覧。
6. ^ ECMA 262, ISO/IEC 16262, JIS X 3060
7. ^ JavaScript 第5版（オライリー・ジャパン、2007）P2。
8. ^ ECMA-262 第5版 2.Conformance
9. ^ WebExtensions, Browser Extensions
10. ^ ECMAScript® 2017 Language Specification (ECMA-262, 8th edition, June 2017) Introduction
11. ^ “Python and JavaScript” (英語). Brendan's Roadmap Updates (2006年2月19日). 2010年1月25日時点のオリジナルよりアーカイブ。2007年9月5日閲覧。
12. ^ 後藤大地 (2008年8月18日). “JavaScript 2.0はECMAScript 3.1ベースに、ECMAScript 4は譲歩”. マイナビニュース. 2013年3月1日時点のオリジナルよりアーカイブ。2022年4月11日閲覧。
13. ^ “Mozilla における ECMAScript 5 のサポート”. 2021年4月20日時点のオリジナルよりアーカイブ。2022年4月11日閲覧。
14. ^ “var – JavaScript – MDN”. The Mozilla Developer Network. 2012年12月22日閲覧。
15. ^ “let – JavaScript – MDN”. The Mozilla Developer Network. 2018年1月24日閲覧。
16. ^ “const – JavaScript – MDN”. The Mozilla Developer Network. 2018年1月24日閲覧。
17. ^ “ECMAScript Language Specification – ECMA-262 Edition 5.1”. Ecmaインターナショナル. 2012年12月22日閲覧。
18. ^ “Console Living Standard” (英語). WHATWG (2017年5月18日). 2017年5月24日閲覧。
19. ^ “console”. Mozilla Developer Network. Mozilla. 2013年4月6日閲覧。
20. ^ “[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/rest_parameters Rest parameters - JavaScript]”. Mozilla Developer Network. Mozilla. 2018年1月24日閲覧。
21. ^ 2020-04-10現在 tc39 stage-4 (finished proposal). ECMAScript2020へ採用予定 tc39
22. ^ “Vanilla JS”. vanilla-js.com. 2020年6月16日時点のオリジナルよりアーカイブ。2021年9月4日閲覧。
23. ^ “JavaScript tracking – Piwik”. Piwik. 2012年3月31日閲覧。
24. ^ 後藤大地 (2009年12月9日). “JavaScriptのブラウザ非互換に解決のみとおし”. journal.mycom.co.jp. 2009年12月9日閲覧。
25. ^ John Resig. “Versions of JavaScript”. Ejohn.org. 2009年5月19日閲覧。
26. ^ “オラクル、JavaScriptの商標を自主的に手放すつもりはないとDenoに通告”. Publickey. https://www.publickey1.jp/blog/25/javascriptdeno_1.html 2025年1月14日閲覧。
27. ^ “U.S. Trademark Serial No. 75026640”. uspto.gov. United States Patent and Trademark Office (1997年5月6日). 2021年7月13日時点のオリジナルよりアーカイブ。2021年5月8日閲覧。
28. ^ “Legal Notices”. oracle.com. Oracle Corporation. 2021年6月5日時点のオリジナルよりアーカイブ。2021年5月8日閲覧。
29. ^ “Oracle to buy Sun in $7.4-bn deal”. The Economic Times. (2009年4月21日). https://economictimes.indiatimes.com/tech/software/oracle-to-buy-sun-in-7-4-bn-deal/articleshow/4427747.cms 2025年1月14日閲覧。
30. ^ “JavaScript™️”. javascript.tm. 2025年1月14日閲覧。

## 関連項目

[編集]

ウィキブックスにJavaScript関連の解説書・教科書があります。

ウィキメディア・コモンズには、JavaScriptに関連するカテゴリがあります。

* JSON（JavaScript Object Notation）- JavaScriptにおけるオブジェクトの記法をベースとした軽量なデータ記述言語。
* Category:JavaScriptを生成する言語も参照。

## 外部リンク

[編集]

* 英語
* JavaScript - MDN
* Standard ECMA-262
* 日本語
* JavaScript - MDN
* JavaScript講座 \- リズムファクトリー社
* JScript \- Microsoft

* 表
* 話
* 編
* 歴

JavaScript

概念|

* 文法（英語版）
* JavaScriptライブラリ
* 控えめなJavaScript

エンジン|

* Carakan/Futhark/Linear B
* Chakra
* JavaScriptCore
* JScript
* KJS
* Narcissus
* Nashorn
* Rhino
* SpiderMonkey
* V8

コンパイラ|

* AtScript
* Babel
* ClojureScript
* CoffeeScript
* Emscripten
* Google Closure Compiler
* Google Web Toolkit
* Haxe
* JSX
* Kotlin
* Nim
* PureScript
* TypeScript

デバッガ|

* Firebug
* Google Chrome Developer Tools
* Internet Explorer Developer Tools
* Opera Dragonfly
* Visual Studio
* Visual Studio Express
* Visual Studio Code
* Web Inspector

エディタ|

* Atom
* Brackets
* Visual Studio
* Visual Studio Express
* Light Table
* Visual Studio Code
* WebStorm

サーバーサイド|

* Active Server Pages
* Bun
* CommonJS
* Deno
* Node.js
* Vert.x（英語版）
* Wakanda（英語版）

フレームワーク

・ライブラリ|

* Angular/AngularJS
* Backbone.js
* Dojo
* Express.js
* Ext JS
* Google Web Toolkit
* jQuery
* Mobile
* KaTeX
* MathJax
* MochiKit
* MooTools
* Prototype
* React
* Vue.js
* YUI ライブラリ
* SolidJS
* Svelte
* Hono
* ElysiaJS
* Qwik

ユニットテスト|

* Jasmine（英語版）
* Jest
* Mocha（英語版）
* QUnit
* ユニットテスト・フレームワーク一覧

Docジェネレータ|

* JSDoc

コード解析|

* ESLint
* JSHint
* JSLint

パッケージ管理|

* npm
* NuGet

アプリケーション

バンドラー|

* Webpack
* Vite
* esbuild

関連技術|

* Ajax
* CSS
* DHTML
* DOM
* HTML
* JSON
* JSONP
* WebAssembly
* asm.js

人物|

* ジョン・レシグ
* ダグラス・クロックフォード（英語版）
* ブレンダン・アイク
* ライアン・ダール

* カテゴリ
* コモンズ
* ウィキブックス
* Portal:コンピュータ

* 表
* 話
* 編
* 歴

ECMAScript

方言|

* ActionScript
* DMDScript
* JavaScript
* asm.js
* JScript
* TypeScript
* WMLScript

エンジン（英語版）|

* Carakan/Futhark/Linear B
* Chakra
* JavaScriptCore
* JScript
* KJS
* Narcissus
* Rhino
* SpiderMonkey
* V8

フレームワーク
・ライブラリ|

| クライアントサイド|

* Dojo
* Ext JS
* Google Web Toolkit
* jQuery
* MochiKit
* MooTools
* Prototype
* YUI Library（英語版）

|

サーバーサイド|

* Jaxer
* Deno
* Node.js

ライブラリ|

* Backbone.js
* Underscore.js

人物|

* ブレンダン・アイク
* ダグラス・クロックフォード（英語版）
* ジョン・レシグ
* スコット・アイザックス（英語版）
* ライアン・ダール

その他|

* AMD（英語版）
* CommonJS
* DHTML
* E4X
* Ecmaインターナショナル
* JSDoc
* JSGI（英語版）
* JSHint
* JSLint
* JSON
* JSSS（英語版）

* 表
* 話
* 編
* 歴

コンピュータ・プログラミング言語

低水準言語|

* 機械語
* アセンブリ言語

高水準言語|

| 1950年代|

* FORTRAN
* ALGOL
* RPG
* COBOL

|

1960年代|

* LISP
* CPL
* BASIC
* PL/I
* APL
* BCPL
* Simula
* LOGO
* B

1970年代|

* Forth
* Pascal
* C
* Prolog
* Smalltalk
* Scheme
* ML
* AWK
* Ada
* Modula-2

1980年代|

* C++
* Objective-C
* Common Lisp
* Eiffel
* Erlang
* Esterel
* Lustre
* Perl
* Mathematica
* J

1990年代|

* Python
* Tcl
* Haskell
* Visual Basic
* Ruby
* Lua
* Delphi
* Java
* ECMAScript (JavaScript)
* PHP
* OCaml
* SuperCollider
* R

2000年代|

* C#
* VB.NET
* Scala
* Clojure
* D
* F#
* Go
* Nim

2010年代|

* Dart
* Ceylon
* Elixir
* Crystal
* Hack
* Swift
* Rust
* Raku
* Elm
* Julia
* Kotlin
* Zig

架空の言語|

* 擬似言語
* CASL
* CAP-X

* 年表
* パラダイム
* 一覧

典拠管理データベース

全般|

* FAST

国立図書館|

* スペイン
* フランス
* BnF data
* ドイツ
* イスラエル
* アメリカ
* チェコ

その他|

* IdRef

*[チェコ]: JavaScript (programovací jazyk)