JavaScriptのArrayBuffer.byteLengthプロパティとは?使い方とエラー例を解説
JavaScriptのArrayBufferオブジェクトは、固定長のバイナリデータを格納するためのバッファを表します。このオブジェクトが持つbyteLengthプロパティは、そのArrayBufferのサイズ(バイト長)を符号なし32ビット整数として返します。
バイナリデータを扱う際、バッファの実際のサイズを確認することは非常に重要です。本記事では、byteLengthプロパティの基本的な使い方から、エラーが発生するケースまで詳しく解説します。
構文
byteLengthプロパティの構文は以下のとおりです。
array.byteLength
引数は不要で、ArrayBufferインスタンスに対して直接アクセスします。
基本的な使用例
まずは、8バイトのArrayBufferを作成し、そのサイズを取得するシンプルな例を見てみましょう。
<html>
<head>
<title>JavaScript Example</title>
</head>
<body>
<script type="text/javascript">
var arrayBuffer = new ArrayBuffer(8);
var result = arrayBuffer.byteLength;
document.write("length of the array buffer is: " + result);
</script>
</body>
</html>
出力結果
length of the array buffer is: 8
コンストラクタに渡した「8」がそのままbyteLengthとして返されていることがわかります。
数値以外を渡した場合の挙動
ArrayBufferのコンストラクタには、バッファのサイズを表す数値を指定します。ここで文字列などの数値以外の値を渡すと、数値への変換が行われます。変換結果が有効な数値でない場合(NaNなど)、サイズは0として扱われます。
次の例では、文字列を渡してArrayBufferを作成しています。
<html>
<head>
<title>JavaScript Example</title>
</head>
<body>
<script type="text/javascript">
var obj = new ArrayBuffer("Hi welcome to Tutorialspoint");
var byteLength = obj.byteLength;
document.write(byteLength);
</script>
</body>
</html>
出力結果
0
このように、有効なサイズ値が指定されていない場合は0が返されます。
エラーが発生するケース
ArrayBufferを作成する際には、いくつかの制約があります。以下のような値を指定すると、エラーが発生します。
- 負の値:バッファサイズに負の数は指定できません
- 複素数:JavaScriptでは複素数は無効なトークンとして扱われます
- 253を超えるサイズ:安全な整数範囲を超えるサイズは指定できません
それぞれのケースについて、具体的な例とエラー内容を見ていきましょう。
サイズが253を超える場合
<html>
<head>
<title>JavaScript Example</title>
</head>
<body>
<script type="text/javascript">
var obj = new ArrayBuffer(9007199254740995);
var byteLength = obj.byteLength;
document.write(byteLength);
</script>
</body>
</html>
出力結果
Error: Array buffer allocation failed
許容される最大サイズを超えるため、バッファの割り当てに失敗します。
複素数を指定した場合
<html>
<head>
<title>JavaScript Example</title>
</head>
<body>
<script type="text/javascript">
var obj = new ArrayBuffer(2+3i);
var byteLength = obj.byteLength;
console.log(byteLength);
</script>
</body>
</html>
出力結果
Error: Invalid or unexpected token
JavaScriptには複素数という型が存在しないため、構文エラーとなります。
負の値を指定した場合
<html>
<head>
<title>JavaScript Example</title>
</head>
<body>
<script type="text/javascript">
var obj = new ArrayBuffer(-72);
var byteLength = obj.byteLength;
console.log(byteLength);
</script>
</body>
</html>
出力結果
Error: Invalid array buffer length
バッファサイズは0以上である必要があるため、負の値を指定すると無効な長さとしてエラーになります。
まとめ
ArrayBuffer.byteLengthプロパティを使えば、作成したバイナリバッファのサイズを簡単に取得できます。ただし、コンストラクタに指定できるのは0以上253以下の整数である点に注意が必要です。不正な値を渡すとエラーが発生するため、動的にサイズを決める場合は事前に値の検証を行うことをおすすめします。
-
JavaScriptのlastIndexプロパティとは?正規表現のマッチ位置を取得する方法
lastIndexプロパティとは JavaScriptにおける「lastIndex」プロパティは、正規表現オブジェクトが持つプロパティの一つで、直前のマッチが終了した位置(インデックス)を返します。そして、次回の検索はその位置から再開されるという仕組みになっています。 重要な注意点として、lastIndexプロパティは「g」(グローバル)フラグが設定されている場合にのみ機能します。「g」フラグがない状態では、lastIndexは常に0のまま変化しないため、連続した検索を行うことができません。 以下は、JavaScriptでlastIndexプロパティを使用する際のコード例です。 サンプルコード
-
JavaScriptのsourceプロパティとは?正規表現パターンテキストを取得する方法を解説
JavaScriptのsourceプロパティは、RegExp(正規表現)オブジェクトに設定されたパターン文字列そのものを返すプロパティです。g(グローバルマッチ)やi(大文字・小文字を区別しない)などのフラグは結果に含まれず、マッチング対象となる純粋な正規表現テキストのみを取得できます。 動的に正規表現を組み立てたい場合や、デバッグ時に実際に適用されているパターンを確認したい場合などに活用できる便利なプロパティです。 基本構文 const regex = /pattern/flags; console.log(regex.source); // パターン文字列のみが返される サンプルコード