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/
- JavaScript/!
- JavaScript/!=
- JavaScript/!==
- JavaScript/""
- JavaScript/"0"
- JavaScript/&&=
- JavaScript/()
- JavaScript/*
- JavaScript/**
- JavaScript/+
- JavaScript/++@
- JavaScript/+@
- JavaScript/--@
- JavaScript/-0
- JavaScript/-@
- JavaScript/-Infinity
- JavaScript/0
- JavaScript/0n
- JavaScript/1
- JavaScript/42
- JavaScript/=
- JavaScript/==
- JavaScript/===
- JavaScript/?.
- JavaScript/?.ブラケット参照演算子
- JavaScript/??
- JavaScript/??=
- JavaScript/@()
- JavaScript/@++
- JavaScript/@--
- JavaScript/@?.()
- JavaScript/AJAX
- JavaScript/AbortController
- JavaScript/AbortSignal
- JavaScript/AggregateError
- JavaScript/Array
- JavaScript/Array/prototype
- JavaScript/Array/prototype/Symbol.iterator
- JavaScript/Array/prototype/concat
- JavaScript/Array/prototype/entries
- JavaScript/Array/prototype/keys
- JavaScript/Array/prototype/push
- JavaScript/Array/prototype/values
- JavaScript/ArrayBuffer
- JavaScript/Array Iterator Objects
- JavaScript/Async Iterable Interface
- JavaScript/Async Iterator Interface
- JavaScript/Asynchronous Module Definition
- JavaScript/Atomics
- JavaScript/BigInt
- JavaScript/BigInt/prototype
- JavaScript/BigInt64Array
- JavaScript/BigUint64Array
- JavaScript/Blob
- JavaScript/Body
- JavaScript/Boolean
- JavaScript/Boolean/prototype
- JavaScript/Booleanとboolean
- JavaScript/BroadcastChannel
- JavaScript/ByteLengthQueuingStrategy
- JavaScript/Canvas
- JavaScript/CommonJS
- JavaScript/Common Iteration Interfaces
- JavaScript/Compression Living Standard
- JavaScript/Console
- JavaScript/Constructor Properties of the Global Object
- JavaScript/CountQueuingStrategy
- JavaScript/Crypto
- JavaScript/DOM
- JavaScript/DOM/Array-Likeオブジェクト
- JavaScript/DOM/Attribute
- JavaScript/DOMDocument
- JavaScript/DOM/Element
- JavaScript/DOM/Node
- JavaScript/DOM/NodeList
- JavaScript/DOM/Text
- JavaScript/DOM/querySelector
- JavaScript/DOM/querySelectorAll
- JavaScript/DOMException
- JavaScript/DataView
- JavaScript/Date
- JavaScript/ECMAScript Module
- JavaScript/ECMAScriptの変遷
- JavaScript/ECMAScript言語仕様読解の手引
- JavaScript/Element
- JavaScript/Error
- JavaScript/EvalError
- JavaScript/Event
- JavaScript/EventTarget
- JavaScript/File
- JavaScript/File API
- JavaScript/FinalizationRegistry
- JavaScript/Float16Array
- JavaScript/Float32Array
- JavaScript/Float64Array
- JavaScript/FormData
- JavaScript/Function
- JavaScript/Function/prototype
- JavaScript/Function/prototype/apply
- JavaScript/Function/prototype/bind
- JavaScript/Function/prototype/call
- JavaScript/Function/prototype/constructor
- JavaScript/Function/prototype/length
- JavaScript/Function/prototype/name
- JavaScript/Function/prototype/toString
- JavaScript/Generator
- JavaScript/Generator/素数ジェネレター
- JavaScript/GeneratorFunction
- JavaScript/Global
- JavaScript/Global Object
- JavaScript/Headers
- JavaScript/Identifier
- JavaScript/Indexed Collections
- JavaScript/Infinity
- JavaScript/Int16Array
- JavaScript/Int32Array
- JavaScript/Int8Array
- JavaScript/Intl
- JavaScript/Iterable Interface
- JavaScript/Iterator
- JavaScript/Iterator/prototype
- JavaScript/Iterator/prototype/Symbol.iterator
- JavaScript/IteratorResult Interface
- JavaScript/Iterator Helper Objects
- JavaScript/Iterator Interface
- JavaScript/JSON
- JavaScript/JSON/parse
- JavaScript/JScript
- JavaScript/JavaScriptのオブジェクト
- JavaScript/JavaScriptのクラス
- JavaScript/JavaScriptの型と値
- JavaScript/JavaScriptの型変換
- JavaScript/JavaScriptの演算子
- JavaScript/JavaScriptエンジン
- JavaScript/Map
- JavaScript/Map/prototype
- JavaScript/Map/prototype/Symbol.iterator
- JavaScript/Map/prototype/entries
- JavaScript/Map/prototype/keys
- JavaScript/Map/prototype/values
- JavaScript/Math
- JavaScript/Math/E
- JavaScript/Math/LN10
- JavaScript/Math/LN2
- JavaScript/Math/LOG10E
- JavaScript/Math/LOG2E
- JavaScript/Math/PI
- JavaScript/Math/SQRT1 2
- JavaScript/Math/SQRT2
- JavaScript/Math/abs
- JavaScript/Math/acos
- JavaScript/Math/acosh
- JavaScript/Math/asin
- JavaScript/Math/asinh
- JavaScript/Math/atan
- JavaScript/Math/atan2
- JavaScript/Math/atanh
- JavaScript/Math/cbrt
- JavaScript/Math/ceil
- JavaScript/Math/clz32
- JavaScript/Math/cos
- JavaScript/Math/cosh
- JavaScript/Math/exp
- JavaScript/Math/expm1
- JavaScript/Math/floor
- JavaScript/Math/fround
- JavaScript/Math/hypot
- JavaScript/Math/imul
- JavaScript/Math/log
- JavaScript/Math/log10
- JavaScript/Math/log1p
- JavaScript/Math/log2
- JavaScript/Math/max
- JavaScript/Math/min
- JavaScript/Math/pow
- JavaScript/Math/random
- JavaScript/Math/round
- JavaScript/Math/sign
- JavaScript/Math/sin
- JavaScript/Math/sinh
- JavaScript/Math/sqrt
- JavaScript/Math/tan
- JavaScript/Math/tanh
- JavaScript/Math/trunc
- JavaScript/Mathオブジェクト
- JavaScript/NaN
- JavaScript/Node
- JavaScript/Node.js Worker API と Web Workers API
- JavaScript/Number
- JavaScript/Number/EPSILON
- JavaScript/Number/MAX SAFE INTEGER
- [[JavaScript/Number/MAX VALUE]
- JavaScript/Number/MIN SAFE INTEGER
- JavaScript/Number/MIN VALUE
- JavaScript/Number/NEGATIVE INFINITY
- JavaScript/Number/NaN
- JavaScript/Number/POSITIVE INFINITY
- JavaScript/Number/isFinite
- JavaScript/Number/isInteger
- JavaScript/Number/isNaN
- JavaScript/Number/isSafeInteger
- JavaScript/Number/parseFloat
- JavaScript/Number/parseInt
- JavaScript/Number/prototype
- JavaScript/Number/prototype/constructor
- JavaScript/Object
- JavaScript/Object.is
- JavaScript/Object/GetOwnPropertyKeys
- JavaScript/Object/ proto
- JavaScript/Object/assign
- JavaScript/Object/create
- JavaScript/Object/defineProperties
- JavaScript/Object/defineProperty
- JavaScript/Object/entries
- JavaScript/Object/freeze
- JavaScript/Object/fromEntries
- JavaScript/Object/getOwnPropertyDescriptor
- JavaScript/Object/getOwnPropertyDescriptors
- JavaScript/Object/getOwnPropertyNames
- JavaScript/Object/getOwnPropertySymbols
- JavaScript/Object/getPrototypeOf
- JavaScript/Object/groupBy
- JavaScript/Object/hasOwn
- JavaScript/Object/is
- JavaScript/Object/isExtensible
- [[JavaScript/Object/isFrozen
- JavaScript/Object/isSealed
- JavaScript/Object/keys
- JavaScript/Object/preventExtensions
- JavaScript/Object/prototype
- JavaScript/Object/prototype/ defineGetter
- JavaScript/Object/prototype/constructor
- JavaScript/Object/prototype/hasOwnProperty
- JavaScript/Object/prototype/isPrototypeOf
- JavaScript/Object/prototype/propertyIsEnumerable
- JavaScript/Object/prototype/toLocaleString
- JavaScript/Object/prototype/toString
- JavaScript/Object/prototype/valueOf
- JavaScript/Object/seal
- JavaScript/Object/setPrototypeOf
- JavaScript/Object/values
- JavaScript/Operators
- JavaScript/Polyfill
- JavaScript/Promise
- JavaScript/Promise/prototype
- JavaScript/Proxy
- JavaScript/Proxy/revocable
- JavaScript/RangeError
- JavaScript/ReadableStream
- JavaScript/ReadableStreamDefaultReader
- JavaScript/ReferenceError
- JavaScript/Reflect
- JavaScript/Reflect/apply
- JavaScript/Reflect/construct
- JavaScript/Reflect/defineProperty
- JavaScript/Reflect/deleteProperty
- JavaScript/RegExp
- JavaScript/RegExp/prototype
- JavaScript/RegExp/prototype/exec
- JavaScript/Request
- JavaScript/Response
- JavaScript/Restパラメータ
- JavaScript/Set
- JavaScript/Set/prototype
- JavaScript/Set/prototype/Symbol.iterator
- JavaScript/Set/prototype/values
- JavaScript/SharedArrayBuffer
- JavaScript/SharedArrayBuffer/prototype
- JavaScript/Streams API
- JavaScript/String
- JavaScript/String/fromCharCode
- JavaScript/String/fromCodePoint
- JavaScript/String/prototype
- JavaScript/String/prototype/StringPaddingBuiltinsImpl
- JavaScript/String/prototype/Symbol.iterator
- JavaScript/String/prototype/at
- JavaScript/String/prototype/charAt
- JavaScript/String/prototype/charCodeAt
- JavaScript/String/prototype/codePointAt
- JavaScript/String/prototype/concat
- JavaScript/String/prototype/constructor
- JavaScript/String/prototype/endsWith
- JavaScript/String/prototype/includes
- JavaScript/String/prototype/indexOf
- JavaScript/String/prototype/isWellFormed
- JavaScript/String/prototype/lastIndexOf
- JavaScript/String/prototype/localeCompare
- JavaScript/String/prototype/match
- JavaScript/String/prototype/matchAll
- JavaScript/String/prototype/normalize
- JavaScript/String/prototype/padEnd
- JavaScript/String/prototype/padStart
- JavaScript/String/prototype/quote
- JavaScript/String/prototype/repeat
- JavaScript/String/prototype/replace
- JavaScript/String/prototype/replaceAll
- JavaScript/String/prototype/search
- JavaScript/String/prototype/slice
- JavaScript/String/prototype/split
- JavaScript/String/prototype/startsWith
- JavaScript/String/prototype/substring
- JavaScript/String/prototype/toLocaleLowerCase
- JavaScript/String/prototype/toLocaleUpperCase
- JavaScript/String/prototype/toLowerCase
- JavaScript/String/prototype/toString
- JavaScript/String/prototype/toUpperCase
- JavaScript/String/prototype/toWellFormed
- JavaScript/String/prototype/trim
- JavaScript/String/prototype/trimEnd
- JavaScript/String/prototype/trimStart
- JavaScript/String/prototype/valueOf
- JavaScript/String/raw
- JavaScript/SuiteSparse
- JavaScript/Symbol
- JavaScript/Symbol/asyncIterator
- JavaScript/Symbol/iterator
- JavaScript/Symbol/toStringTag
- JavaScript/SyntaxError
- JavaScript/TransformStream
- JavaScript/Tree Shaking
- JavaScript/TypeError
- JavaScript/TypedArray
- JavaScript/URIError
- JavaScript/URL
- JavaScript/URLSearchParams
- JavaScript/Uint16Array
- JavaScript/Uint32Array
- JavaScript/Uint8Array
- JavaScript/Uint8ClampedArray
- JavaScript/Universal Module Definition
- JavaScript/Vue.js
- JavaScript/WeakMap
- JavaScript/WeakMap/prototype
- JavaScript/WeakRef
- JavaScript/WeakSet
- JavaScript/WeakSet/prototype
- JavaScript/WebAssembly
- JavaScript/WebSocket
- JavaScript/Web Compatibility Standard
- JavaScript/Web Worker
- JavaScript/Web Worker API
- JavaScript/Web開発におけるワークフロー管理システム
- JavaScript/Well-Known Symbols
- JavaScript/Window
グローバルインスタンス
[編集]外部リンク
[編集]- ^ 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

