JavaScript

本書は、JavaScriptの解説書です。JavaScriptは、ウェブページやウェブアプリケーションで広く使われているスクリプト言語であり、最も広く普及しているプログラミング言語の一つです。また、Node.jsなどのランタイム環境を使うことで、サーバーサイドでもJavaScriptを実行することができます。
本書では、初めてプログラミングをする人から、他の言語で経験を積んだ人まで、広く対象としています。基本的なJavaScriptの書き方を解説することで、読者がより深く理解できるように配慮しました。
JavaScriptは、初心者が学ぶのに最適なプログラミング言語であり、ブラウザだけで簡単にプログラムを作ることができます。言語のコア部分は、国際標準化団体であるEcmaインターナショナルによってECMAScriptとして標準化され、仕様が明確になっています。Node.jsなどのランタイム環境を使うことで、JavaScriptをより高度なアプリケーション開発にも利用できます。
目次
[編集]




- はじめに
- 文法
- 変数
- 演算子
- オブジェクト
- 文字列
- 数値
- 配列
- 制御構造
- 関数
- クラス
- strictモード
- ビット演算
- 例外処理
- 正規表現
- 長整数
- 型付き配列
- Polyfill
- ブラウザ
- コードギャラリー
- Web API — Web APIは、JavaScriptでWebブラウザを制御する標準的な手段であり、Webページに対して様々な操作(例えば、要素の追加や削除、イベントの処理、非同期通信等)を行うことができます。
- 改廃された技術
- ライブラリ(フレームワーク)
- JSON
- XML
- リファレンス
名称 | 種類 | 機能 |
---|---|---|
Object |
コンストラクタ関数 | すべてのオブジェクトの基本となるプロトタイプを提供。 |
Function |
コンストラクタ関数 | 関数オブジェクトを定義し、動的に関数を作成可能。 |
Array |
コンストラクタ関数 | 順序付きリストを保持し、要素の操作をサポート。 |
String |
コンストラクタ関数 | 文字列を扱い、各種文字列操作メソッドを提供。 |
Number |
コンストラクタ関数 | 数値を扱い、数値演算や変換を提供。 |
BigInt |
コンストラクタ関数 | 大きな整数 (2^53 以上) を扱う。
|
Boolean |
コンストラクタ関数 | true または false を扱う。
|
Symbol |
コンストラクタ関数 | 一意な識別子を作成するためのプリミティブ型オブジェクト。 |
Math |
グローバルオブジェクト | 数学的な定数 (Math.PI ) や関数 (Math.sqrt() ) を提供。
|
Date |
コンストラクタ関数 | 日時を扱い、操作・フォーマットが可能。 |
RegExp |
コンストラクタ関数 | 正規表現を扱い、文字列検索や置換を実行。 |
Error |
コンストラクタ関数 | エラーオブジェクトで、例外処理用の基本クラス。 |
Promise |
コンストラクタ関数 | 非同期処理の結果を表し、コールバックの代替として使用。 |
Map |
コンストラクタ関数 | キーと値のペアを保持し、キーにあらゆるデータ型を使用可能。 |
Set |
コンストラクタ関数 | 一意の値を保持するコレクション。 |
WeakMap |
コンストラクタ関数 | Map のような構造だが、キーが弱参照される。
|
WeakSet |
コンストラクタ関数 | Set のような構造だが、オブジェクトのみを保持し、弱参照される。
|
JSON |
グローバルオブジェクト | JSONのパース (JSON.parse() ) や文字列化 (JSON.stringify() ) を提供。
|
Intl |
グローバルオブジェクト | 国際化 (Intl.DateTimeFormat など) をサポート。
|
Reflect |
グローバルオブジェクト | オブジェクト操作を動的に行うメタプログラミング用API。 |
Proxy |
コンストラクタ関数 | オブジェクトの動作をカスタマイズするためのインターセプターを提供。 |
Atomics |
グローバルオブジェクト | SharedArrayBuffer を用いたスレッド間の低レベル同期を提供。
|
SharedArrayBuffer |
コンストラクタ関数 | 複数のWeb Worker間でメモリ共有を可能にするバッファ。 |
ArrayBuffer |
コンストラクタ関数 | バイナリデータを固定長で扱うバッファ。 |
DataView |
コンストラクタ関数 | ArrayBuffer に対して異なるデータ型でアクセス可能なビュー。
|
TypedArray |
コンストラクタ関数 | 型付き配列 (Int8Array など) を提供し、高速なバイナリデータ操作を実現。
|
- ポイント
Math
やJSON
は グローバルオブジェクト で、インスタンス化 (new Math()
) できない。Object
,Array
,Function
などは コンストラクタ関数 で、new
を使ってインスタンスを作成可能。Promise
,Map
,Set
なども コンストラクタ関数 で、新しいデータ構造を提供。Reflect
,Atomics
は グローバルオブジェクト であり、特定のユーティリティ機能を提供。
Javaとの関連性
[編集]JavaScriptとJavaは名前が似ていますが、実際にはかなり異なるプログラミング言語です。それぞれの特徴と関連性について簡潔に説明します。
- 起源と命名
- JavaScriptは当初、Java言語の人気にあやかって名付けられました。
- しかし、両言語の開発元は異なります(JavaScriptはNetscape、JavaはSun Microsystems)。
- 言語の特徴
- JavaScript: 主にWeb開発用の動的型付け言語。
- Java: 汎用的な静的型付け言語。
- 実行環境
- JavaScript: 主にブラウザ上で動作(Node.jsなどサーバーサイドも可能)。
- Java: 主にサーバーサイドやデスクトップアプリケーションで使用。
- 構文
- 一部の構文(ループ、条件文、演算子など)に類似点がありますが、全体的な言語設計は大きく異なります。
- オブジェクト指向
- 両言語ともオブジェクト指向をサポートしていますが、実装方法が異なります。
- JavaScript: プロトタイプベースのオブジェクト指向言語。
- Java: クラスベースのオブジェクト指向言語。
- 相互運用性
- 完全に別々の言語であり、直接的な互換性はありません。
- 用途
- JavaScriptはWeb開発、特にフロントエンド開発で主に使用されます。
- Javaは大規模なエンタープライズアプリケーション、Androidアプリ開発などに使用されます。
結論として、JavaScriptとJavaは名前の類似性以外に深い関連性はありません。それぞれが異なる目的と設計思想を持つ独立した言語です。
JavaScriptの応用範囲
[編集]JavaScriptは、Web開発において最も広く使用される言語の一つであり、以下のような応用範囲があります。
- クライアントサイドWeb開発:JavaScriptは、Webブラウザで動作するクライアントサイドのWebアプリケーション開発に使用されます。JavaScriptを使用することで、ユーザーがWebページやWebアプリケーションを対話的に操作することができます。
- サーバーサイドWeb開発:Node.jsを使用することで、JavaScriptはサーバーサイドのWebアプリケーション開発にも使用されます。Node.jsは、JavaScriptを実行するためのランタイム環境であり、サーバーサイドでのWebアプリケーションの実行や、データベースやファイルシステムなどのI/O操作を実行することができます。
- モバイルアプリケーション開発:React Nativeを使用することで、JavaScriptはモバイルアプリケーション開発にも使用されます。React Nativeは、JavaScriptを使用してiOSやAndroidのネイティブモバイルアプリケーションを開発するためのフレームワークです。
- デスクトップアプリケーション開発:Electronを使用することで、JavaScriptはデスクトップアプリケーション開発にも使用されます。Electronは、JavaScriptを使用して、Windows、Mac、Linuxなどのデスクトップアプリケーションを開発するためのフレームワークです。
- ゲーム開発:JavaScriptは、Webブラウザ上で動作するゲーム開発にも使用されます。HTML5 CanvasやWebGLなどのWeb技術を使用することで、高品質のWebゲームを開発することができます。
JavaScriptは、Web技術を中心に広く使用される言語であり、多くの場面で使用されています。これらの応用範囲は、今後も拡大することが予想されます。
派生言語
[編集]JavaScriptの派生言語には、以下のようなものがあります。
TypeScript
[編集]Microsoftが開発したJavaScriptのスーパーセットであり、静的型付けやクラス、インターフェースなどの機能を追加しています。
- TypeScriptのコード例
function greet(name: string) { console.log(`Hello, ${name}!`); } greet("John");
JavaScript XML
[編集]JavaScript XML(JSX)は、JavaScriptの拡張構文であり、Reactフレームワークで一般的に使用されます。JSXは、HTMLライクな構文をJavaScriptコードに埋め込むことができ、Reactコンポーネントの宣言的な記述やUIの構築を簡素化します。
JSXでは、<div>
や<span>
などのHTML要素をJavaScriptコード内で直接記述できます。これにより、コンポーネント階層構造を視覚的に表現し、リーダブルで保守しやすいコードを記述できます。また、JavaScriptの変数や式を{}
で囲んで埋め込むことができ、動的な値をレンダリングすることができます。
例えば、以下はJSXを使用してReactコンポーネントを宣言的に記述する例です:
- JavaScript XMLのコード例
import React from 'react'; const Greeting = ({ name }) => { return ( <div> <h1>Hello, {name}!</h1> <p>Welcome to JSX.</p> </div> ); }; export default Greeting;
この例では、Greeting
コンポーネントがname
プロパティを受け取り、JSX内でその値を表示しています。JSXはReactにおいて、UIを構築するためのシンタックスシュガーとして広く採用され、Reactの開発者がより効果的かつ可読性の高いコードを書くのに役立ちます。
TypeScript XML
[編集]TypeScript XML(TSX)は、Reactアプリケーションのためのファイル拡張子で、TypeScriptを使用してReactコンポーネントを記述するための構文です。TSXファイルは、JSX(JavaScript XML)とTypeScriptの機能を組み合わせたもので、静的型チェックとReactコンポーネントの記述を同時に行うことができます。
TSXでは、Reactコンポーネントを定義するために、JSXの構文を使用します。この構文は、HTMLライクな要素構造をJavaScriptやTypeScriptのコード内に埋め込むためのもので、UIを宣言的かつコンパクトに記述できます。また、TypeScriptの型システムを活用して、コンポーネントのプロパティやステートに関する型情報を提供できます。
例えば、以下は簡単なReactコンポーネントを含むTSXファイルの例です:
- TypeScript XMLのコード例
import React, { useState } from 'react'; interface CounterProps { initialValue: number; } const Counter: React.FC<CounterProps> = ({ initialValue }) => { const [count, setCount] = useState(initialValue); const increment = () => setCount(count + 1); const decrement = () => setCount(count - 1); return ( <div> <p>Count: {count}</p> <button onClick={increment}>Increment</button> <button onClick={decrement}>Decrement</button> </div> ); }; export default Counter;
この例では、Counter
コンポーネントがCounterProps
型のプロパティを受け取り、ステートとしてcount
を持っています。JSX内で{}
を使用してJavaScriptやTypeScriptのコードを埋め込むことができ、動的なUIを構築できます。
CoffeeScript
[編集]JavaScriptの文法をより簡潔にした言語で、コードを読みやすくするための構文糖衣を提供します。
- CoffeeScriptのコード例
greet = (name) -> console.log "Hello, #{name}!" greet "John"
参考文献
[編集]- Standard ECMA-262 5.1 Edition / June 2011 ECMAScript® Language Specification(注釈版)
- Standard ECMA-262 6th Edition / June 2015 ECMAScript® 2015 Language Specification
- Draft ECMA-262 ECMAScript® Language Specification
- ECMA-402 7th Edition / June 2020 ECMAScript® 2020 Internationalization API Specification
標準API
[編集]- Compatibility Living Standard
- Compression Living Standard
- Console Living Standard
- DOM Living Standard
- Encoding Living Standard
- Fetch Living Standard
- File System Living Standard
- Fullscreen API Living Standard
- HTML Living Standard
- Infra Living Standard
- MIME Sniffing Living Standard
- Notifications API Living Standard
- Quirks Mode Living Standard
- Storage Living Standard
- Streams Living Standard
- Test Utils Living Standard
- URL Living Standard
- URL Pattern Living Standard
- Web IDL Living Standard
- WebSockets Living Standard
- Media Session Standard
- XMLHttpRequest Living Standard Ajax
関連項目
[編集]下位階層のページ
[編集]- JavaScript/
- !
- !=
- !==
- ""
- "0"
- &&=
- ()
- *
- **
- +
- ++@
- +@
- --@
- -0
- -@
- -Infinity
- 0
- 0n
- 1
- 42
- =
- ==
- ===
- ?.
- ?.ブラケット参照演算子
- ??
- ??=
- @()
- @++
- @--
- @?.()
- AJAX
- AbortController
- AbortSignal
- AggregateError
- Array
- Array/prototype
- Array/prototype/Symbol.iterator
- Array/prototype/concat
- Array/prototype/entries
- Array/prototype/keys
- Array/prototype/push
- Array/prototype/values
- ArrayBuffer
- Array Iterator Objects
- Async Iterable Interface
- Async Iterator Interface
- Asynchronous Module Definition
- Atomics
- BigInt
- BigInt/prototype
- BigInt64Array
- BigUint64Array
- Blob
- Body
- Boolean
- Boolean/prototype
- Booleanとboolean
- BroadcastChannel
- ByteLengthQueuingStrategy
- Canvas
- CommonJS
- Common Iteration Interfaces
- Compression Living Standard
- Console
- Constructor Properties of the Global Object
- CountQueuingStrategy
- Crypto
- DOM
- DOM/Array-Likeオブジェクト
- DOM/Attribute
- DOM/Document
- DOM/Element
- DOM/Node
- DOM/NodeList
- DOM/Text
- DOM/querySelector
- DOM/querySelectorAll
- DOMException
- DataView
- Date
- ECMAScript Module
- ECMAScriptの変遷
- ECMAScript言語仕様読解の手引
- Element
- Error
- EvalError
- Event
- EventTarget
- File
- File API
- FinalizationRegistry
- Float16Array
- Float32Array
- Float64Array
- FormData
- Function
- Function/prototype
- Function/prototype/apply
- Function/prototype/bind
- Function/prototype/call
- Function/prototype/constructor
- Function/prototype/length
- Function/prototype/name
- Function/prototype/toString
- Generator
- GeneratorFunction
- Global
- Global Object
- Headers
- Identifier
- Indexed Collections
- Infinity
- Int16Array
- Int32Array
- Int8Array
- Intl
- Iterable Interface
- Iterator
- Iterator/prototype
- Iterator/prototype/Symbol.iterator
- IteratorResult Interface
- Iterator Helper Objects
- Iterator Interface
- JSON
- JSON/parse
- JScript
- JavaScriptのオブジェクト
- JavaScriptのクラス
- JavaScriptの型と値
- JavaScriptの型変換
- JavaScriptの演算子
- JavaScriptエンジン
- Map
- Map/prototype
- Map/prototype/Symbol.iterator
- Map/prototype/entries
- Map/prototype/keys
- Map/prototype/values
- Math
- Math/E
- Math/LN10
- Math/LN2
- Math/LOG10E
- Math/LOG2E
- Math/PI
- Math/SQRT1 2
- Math/SQRT2
- Math/abs
- Math/acos
- Math/acosh
- Math/asin
- Math/asinh
- Math/atan
- Math/atan2
- Math/atanh
- Math/cbrt
- Math/ceil
- Math/clz32
- Math/cos
- Math/cosh
- Math/exp
- Math/expm1
- Math/floor
- Math/fround
- Math/hypot
- Math/imul
- Math/log
- Math/log10
- Math/log1p
- Math/log2
- Math/max
- Math/min
- Math/pow
- Math/random
- Math/round
- Math/sign
- Math/sin
- Math/sinh
- Math/sqrt
- Math/tan
- Math/tanh
- Math/trunc
- Mathオブジェクト
- NaN
- Node
- Node.js Worker API と Web Workers API
- Number
- Number/EPSILON
- Number/MAX SAFE INTEGER
- Number/MAX VALUE
- Number/MIN SAFE INTEGER
- Number/MIN VALUE
- Number/NEGATIVE INFINITY
- Number/NaN
- Number/POSITIVE INFINITY
- Number/isFinite
- Number/isInteger
- Number/isNaN
- Number/isSafeInteger
- Number/parseFloat
- Number/parseInt
- Number/prototype
- Number/prototype/constructor
- Object
- Object.is
- Object/GetOwnPropertyKeys
- Object/ proto
- Object/assign
- Object/create
- Object/defineProperties
- Object/defineProperty
- Object/entries
- Object/freeze
- Object/fromEntries
- Object/getOwnPropertyDescriptor
- Object/getOwnPropertyDescriptors
- Object/getOwnPropertyNames
- Object/getOwnPropertySymbols
- Object/getPrototypeOf
- Object/groupBy
- Object/hasOwn
- Object/is
- Object/isExtensible
- Object/isFrozen
- Object/isSealed
- Object/keys
- Object/preventExtensions
- Object/prototype
- Object/prototype/ defineGetter
- Object/prototype/constructor
- Object/prototype/hasOwnProperty
- Object/prototype/isPrototypeOf
- Object/prototype/propertyIsEnumerable
- Object/prototype/toLocaleString
- Object/prototype/toString
- Object/prototype/valueOf
- Object/seal
- Object/setPrototypeOf
- Object/values
- Operators
- Polyfill
- Promise
- Promise/prototype
- Proxy
- Proxy/revocable
- RangeError
- ReadableStream
- ReadableStreamDefaultReader
- ReferenceError
- Reflect
- Reflect/apply
- Reflect/construct
- Reflect/defineProperty
- Reflect/deleteProperty
- RegExp
- RegExp/prototype
- RegExp/prototype/exec
- Request
- Response
- Restパラメータ
- Set
- Set/prototype
- Set/prototype/Symbol.iterator
- Set/prototype/values
- SharedArrayBuffer
- SharedArrayBuffer/prototype
- Streams API
- String
- String/fromCharCode
- String/fromCodePoint
- String/prototype
- String/prototype/StringPaddingBuiltinsImpl
- String/prototype/Symbol.iterator
- String/prototype/at
- String/prototype/charAt
- String/prototype/charCodeAt
- String/prototype/codePointAt
- String/prototype/concat
- String/prototype/constructor
- String/prototype/endsWith
- String/prototype/includes
- String/prototype/indexOf
- String/prototype/isWellFormed
- String/prototype/lastIndexOf
- String/prototype/localeCompare
- String/prototype/match
- String/prototype/matchAll
- String/prototype/normalize
- String/prototype/padEnd
- String/prototype/padStart
- String/prototype/quote
- String/prototype/repeat
- String/prototype/replace
- String/prototype/replaceAll
- String/prototype/search
- String/prototype/slice
- String/prototype/split
- String/prototype/startsWith
- String/prototype/substring
- String/prototype/toLocaleLowerCase
- String/prototype/toLocaleUpperCase
- String/prototype/toLowerCase
- String/prototype/toString
- String/prototype/toUpperCase
- String/prototype/toWellFormed
- String/prototype/trim
- String/prototype/trimEnd
- String/prototype/trimStart
- String/prototype/valueOf
- String/raw
- SuiteSparse
- Symbol
- Symbol/asyncIterator
- Symbol/iterator
- Symbol/toStringTag
- SyntaxError
- TransformStream
- Tree Shaking
- TypeError
- TypedArray
- URIError
- URL
- URLSearchParams
- Uint16Array
- Uint32Array
- Uint8Array
- Uint8ClampedArray
- Universal Module Definition
- Vue.js
- WeakMap
- WeakMap/prototype
- WeakRef
- WeakSet
- WeakSet/prototype
- WebAssembly
- WebSocket
- Web Compatibility Standard
- Web Worker
- Web Worker API
- Web開発におけるワークフロー管理システム
- Well-Known Symbols
- Window
- Worker
グローバルインスタンス
[編集]外部リンク
[編集]- ^ DOM: https://dom.spec.whatwg.org/#interface-AbortSignal
- ^ File API: https://w3c.github.io/FileAPI/#blob-section
- ^ HTML: https://html.spec.whatwg.org/multipage/web-messaging.html#broadcasting-to-other-browsing-contexts
- ^ Node.js: https://nodejs.org/api/buffer.html
- ^ Streams: https://streams.spec.whatwg.org/#blqs-class
- ^ Compression: https://compression.spec.whatwg.org/#compression-stream