--- title: バイナリー文字列 slug: Web/API/DOMString/Binary tags: - DOM - JavaScript - JavaScript typed arrays - JavaScript 型付き配列 - Reference - String translation_of: Web/API/DOMString/Binary ---
{{jsxref("String", "JavaScript の文字列")}} は、UTF-16 でエンコードされた文字列です。つまり、コードの最小単位はメモリー上に 2 バイトを必要とし、65535
通りのコードポイントを表現できます。この文字列のある部分集合として、ASCII 文字 (つまりコードポイントが 127
を超えない文字) だけを含む UTF-16 文字列というものが考えられます。例えば、文字列 "Hello world!"
は、この ASCII 部分集合に含まれますが、文字列 "ÀÈÌÒÙ"
はそうではありません。バイナリー文字列とは、この ASCII 部分集合と似た概念ですが、コードポイントを 127
までではなく、255
まで許可するものです。しかし、その目的は文字列を表現することではなく、バイナリーデータを表現することです。この方法で表現されるデータの大きさは、バイナリーのままに比べて 2 倍になりますが、JavaScript の文字列の長さは 2 バイトを一つの単位として計算されるため、その大きさがユーザーの目に触れることはありません。
バイナリー文字列は、JavaScript の言語設計には含まれていません。しかし、バイナリー文字列を入力として受け取るネイティブ関数が少なくとも一つあり、それは {{domxref("WindowBase64.btoa","btoa()")}} です。コードポイントが 255
を超える文字列を使ってこの関数を実行すると、Character Out Of Range
エラーが発生します。
uint8
の数値の代わりに UTF-16 のコード単位を使うようになった理由は、ウェブアプリケーションがどんどん強力になっていくにつれて (音声や映像の処理や、WebSockets を使った生データへのアクセスなどができるようになりました)、JavaScript コードが生のバイナリーデータを迅速かつ容易に処理できれば便利である場面があることが明らかになったからです。
かつては、バイナリーデータを扱うには、データを文字列として扱い、charCodeAt()
メソッドを使ってデータバッファー (つまりバイナリー文字列) からバイトを読むといった、模擬的な方法によらざるを得ませんでした。しかしこの方法は遅く、複数回の変換が必要になるため、エラーも起こしやすいものでした (特にバイナリーデータの構造が実際にはバイト単位ではなく、例えば 32 ビットの整数や実数である場合)。
JavaScript 型付き配列 を使えば、より効率的に生のバイナリーデータを処理することができます。また、StringView
非ネイティブ コンストラクターは、型付き配列の 1 レベル上であり、C言語 に似た文字列用のインターフェイスを提供します。