JavaScript

Web ブラウザで動作する言語として生まれ、今やサーバーやアプリ開発まで担う汎用言語

プログラミング言語フロントエンド
JavaScript」の技術書を見る →

JavaScript とは

JavaScript は、もともと Web ブラウザ上で動作させるために 1995 年に生まれたプログラミング言語だ。当初はページに簡単な動きを加える補助的な役割だったが、現在ではフロントエンド・サーバーサイド (Node.js)・モバイルアプリ・デスクトップアプリまでをカバーする汎用言語へと発展している。

特徴

JavaScript は動的型付けのインタプリタ言語で、変数に型宣言が不要だ。関数を値として扱える第一級関数や、非同期処理を扱うイベントループといった仕組みを持ち、特に I/O 待ちの多い Web 処理と相性がよい。言語仕様は Ecma International が ECMA-262 (ECMAScript) として標準化しており、2026 年 8 月時点の最新版は 2026 年 6 月の第 17 版だ。第 6 版 (2015 年 6 月) 以降は毎年 6 月に新しい版を出す周期で運用され、策定中の仕様も Ecma International の技術委員会 TC39 が草案として常時公開している。つまり「新しい JavaScript」は年単位で動く前提で、ある機能が使えるかどうかは仕様の版ではなく実行環境 (ブラウザや Node.js) の対応状況で確かめることになる。

TypeScript との関係

観点JavaScriptTypeScript
動的 (実行時に判定)静的 (コンパイル時に検査)
学習コスト低いやや高い
大規模開発型がなく崩れやすい型で安全性を担保
実行そのまま動く型を取り除いてから動かす

TypeScript は JavaScript の構文をそのまま含むスーパーセットで、既存の JavaScript コードは基本的に手を加えずに TypeScript として扱える。逆は成り立たず、型注釈を含むコードは型を取り除かないと動かない。取り除き方は 2 通りある。コンパイラで JavaScript へ変換するか、実行時に型注釈を捨てて走らせるかだ。後者は Node.js が備えており、消去可能な型構文だけで書かれたファイルなら型注釈を空白へ置き換えて実行する (v25.2.0 と v24.12.0 で安定版扱いになった)。ただしこの経路では型検査そのものが行われない。型の安全性は変換や検査の工程を通して初めて得られるもので、拡張子を .ts にした時点で付いてくるわけではない。

実務での注意点

ブラウザによる挙動の差は標準化が進んで縮小したが、非同期処理の扱いは今も誤りが起きやすい。コールバックの入れ子 (コールバック地獄) は Promise や async/await で解消できるが、エラーハンドリングを怠ると失敗が握りつぶされる。また nullundefined、緩い等価比較 (==) など、独特の落とし穴を理解しておくことがバグ予防につながる。

== の危うさは「型が違えば変換される」で終わらない。手元で動かすと次のようになる。

console.log(0 == '');   // true
console.log(0 == '0');  // true
console.log('' == '0'); // false

前の 2 行が true なのに 3 行目は false になる。== は「A と B が等しく B と C が等しければ A と C も等しい」という推移性を満たさないということで、条件分岐を組み替えたときに思わぬ場所で顔を出す。既定は === にして、== は意図がある箇所だけに限るのが安全側だ。

nullundefined の違いも実務に効く。既定値つきの引数は undefined を渡したときだけ既定値が使われ、null を渡せば null がそのまま入る。JSON.stringify は値が undefined のキーを出力から落とし、null のキーは残す。「未設定」をどちらで表すかは、API の入出力を跨ぐ場面では先に決めておかないと、片側で消えて片側で残るという食い違いになる。

学ぶ順としては、文法を一通り追うより先に非同期処理を 1 つ書いて動かすほうが早い。データを取得し、失敗する場合を捕まえ、await を付け忘れたときに何が起きるかまで手元で確かめておくと、実務で出会うバグの多くがその延長線上にあると分かる。

この記事は役に立ちましたか?

関連用語

関連する記事