From 0d85f77dda5f7f6d61eafa0587af3f1ef61a3005 Mon Sep 17 00:00:00 2001 From: Masahiro FUJIMOTO Date: Thu, 9 Sep 2021 20:09:16 +0900 Subject: Global_Objects/DataView 以下を更新 (#2297) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Global_Objects/DataView を 2021/09/01 時点の英語版に同期 - getBigInt64(), getBigUint64(), setBigInt64(), setBigUint64() 新規翻訳 --- .../global_objects/dataview/getbigint64/index.md | 71 +++++++++ .../global_objects/dataview/getbiguint64/index.md | 71 +++++++++ .../reference/global_objects/dataview/index.html | 162 --------------------- .../reference/global_objects/dataview/index.md | 149 +++++++++++++++++++ .../global_objects/dataview/setbigint64/index.md | 70 +++++++++ .../global_objects/dataview/setbiguint64/index.md | 70 +++++++++ 6 files changed, 431 insertions(+), 162 deletions(-) create mode 100644 files/ja/web/javascript/reference/global_objects/dataview/getbigint64/index.md create mode 100644 files/ja/web/javascript/reference/global_objects/dataview/getbiguint64/index.md delete mode 100644 files/ja/web/javascript/reference/global_objects/dataview/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/dataview/index.md create mode 100644 files/ja/web/javascript/reference/global_objects/dataview/setbigint64/index.md create mode 100644 files/ja/web/javascript/reference/global_objects/dataview/setbiguint64/index.md (limited to 'files/ja/web/javascript/reference/global_objects/dataview') diff --git a/files/ja/web/javascript/reference/global_objects/dataview/getbigint64/index.md b/files/ja/web/javascript/reference/global_objects/dataview/getbigint64/index.md new file mode 100644 index 0000000000..9570e8227f --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/dataview/getbigint64/index.md @@ -0,0 +1,71 @@ +--- +title: DataView.prototype.getBigInt64() +slug: Web/JavaScript/Reference/Global_Objects/DataView/getBigInt64 +tags: + - BigInt + - DataView + - JavaScript + - Method + - Prototype + - Reference + - TypedArrays + - getBigInt64() +translation_of: Web/JavaScript/Reference/Global_Objects/DataView/getBigInt64 +browser-compat: javascript.builtins.DataView.getBigInt64 +--- +{{JSRef}} + +**`getBigInt64()`** メソッドは、符号つき 64 ビット整数 (long long) を {{jsxref("DataView")}} の先頭からのバイト単位のオフセット位置から取得します。 + +{{EmbedInteractiveExample("pages/js/dataview-getbigint64.html")}} + +## 構文 + +```js +getBigInt64(byteOffset) +getBigInt64(byteOffset, littleEndian) +``` + +### 引数 + +- byteOffset + - : データを読み取るビューの先頭からのバイト単位のオフセットです。 +- littleEndian + - : {{optional_inline}} 64 ビット整数を[リトルエンディアンまたはビッグエンディアン](/ja/docs/Glossary/Endianness)のどちらの形式で格納されているかを示します。 `false` または `undefined` の場合、ビッグエンディアンの値が読み取られます。 + +### 返値 + +{{jsxref("BigInt")}} です。 + +### 発生するエラー + +- {{jsxref("RangeError")}} + - : `byteOffset` がビューの末尾を超えて読み取るような値に設定されたときに発生します。 + +## 解説 + +アライメントの制約はありません。複数バイトの値はどのオフセットからでも読み取ることができます。 + +## 例 + +### `getBigInt64` メソッドの使用 + +```js +var buffer = new ArrayBuffer(8); +var dataview = new DataView(buffer); +dataview.getBigInt64(0); // 0n +``` + +## 仕様書 + +{{Specifications}} + +## ブラウザーの互換性 + +{{Compat}} + +## 関連情報 + +- {{jsxref("DataView")}} +- {{jsxref("ArrayBuffer")}} +- {{jsxref("BigInt")}} diff --git a/files/ja/web/javascript/reference/global_objects/dataview/getbiguint64/index.md b/files/ja/web/javascript/reference/global_objects/dataview/getbiguint64/index.md new file mode 100644 index 0000000000..8547f34125 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/dataview/getbiguint64/index.md @@ -0,0 +1,71 @@ +--- +title: DataView.prototype.getBigUint64() +slug: Web/JavaScript/Reference/Global_Objects/DataView/getBigUint64 +tags: + - BigInt + - DataView + - JavaScript + - Method + - Prototype + - Reference + - TypedArrays + - getBigUint64 +translation_of: Web/JavaScript/Reference/Global_Objects/DataView/getBigUint64 +browser-compat: javascript.builtins.DataView.getBigUint64 +--- +{{JSRef}} + +**`getBigInt64()`** メソッドは、符号なし 64 ビット整数 (unsigned long long) を {{jsxref("DataView")}} の先頭からのバイト単位のオフセット位置から取得します。 + +{{EmbedInteractiveExample("pages/js/dataview-getbiguint64.html")}} + +## 構文 + +```js +getBigUint64(byteOffset) +getBigUint64(byteOffset, littleEndian) +``` + +### 引数 + +- byteOffset + - : データを読み取るビューの先頭からのバイト単位のオフセットです。 +- littleEndian + - : {{optional_inline}} 64 ビット整数を[リトルエンディアンまたはビッグエンディアン](/ja/docs/Glossary/Endianness)のどちらの形式で格納されているかを示します。 `false` または `undefined` の場合、ビッグエンディアンの値が読み取られます。 + +### 返値 + +{{jsxref("BigInt")}} です。 + +### 発生するエラー + +- {{jsxref("RangeError")}} + - : `byteOffset` がビューの末尾を超えて読み取るような値に設定されたときに発生します。 + +## 解説 + +アライメントの制約はありません。複数バイトの値はどのオフセットからでも読み取ることができます。 + +## 例 + +### `getBigUint64` メソッドの使用 + +```js +var buffer = new ArrayBuffer(8); +var dataview = new DataView(buffer); +dataview.getBigUint64(0); // 0n +``` + +## 仕様書 + +{{Specifications}} + +## ブラウザーの互換性 + +{{Compat}} + +## 関連情報 + +- {{jsxref("DataView")}} +- {{jsxref("ArrayBuffer")}} +- {{jsxref("BigInt")}} diff --git a/files/ja/web/javascript/reference/global_objects/dataview/index.html b/files/ja/web/javascript/reference/global_objects/dataview/index.html deleted file mode 100644 index c53ce5dfdd..0000000000 --- a/files/ja/web/javascript/reference/global_objects/dataview/index.html +++ /dev/null @@ -1,162 +0,0 @@ ---- -title: DataView -slug: Web/JavaScript/Reference/Global_Objects/DataView -tags: - - Class - - DataView - - JavaScript - - TypedArrays -translation_of: Web/JavaScript/Reference/Global_Objects/DataView ---- -
{{JSRef}}
- -

DataView ビューは {{jsxref("ArrayBuffer")}} の多様な数値型を、プラットフォームの{{glossary("Endianness", "エンディアン")}}に関係なく読み書きするための低水準インターフェイスを提供します。

- -

説明

- -

エンディアン

- -

多バイトの数値形式は、マシンアーキテクチャによってメモリー内での表現が異なります。これは {{Glossary("Endianness", "エンディアン")}}で説明しています。DataView のアクセサーは、プラットフォームアーキテクチャのエンディアンに関係なくデータにアクセスする方法を明確に制御する手段を提供します。

- -
var littleEndian = (function() {
-  var buffer = new ArrayBuffer(2);
-  new DataView(buffer).setInt16(0, 256, true /* リトルエンディアン */);
-  // Int16Array はプラットフォームのエンディアンを使用する
-  return new Int16Array(buffer)[0] === 256;
-})();
-console.log(littleEndian); // true または false
-
- -

64 ビット整数値

- -

JavaScript は現在のところ、64 ビット整数値に標準で対応していないので、DataView はネイティブの 64 ビット操作を提供していません。回避策として、独自で getUint64() 関数を実装して {{jsxref("Number.MAX_SAFE_INTEGER")}} までの制度の値を受け取れるようにします。

- -
function getUint64(dataview, byteOffset, littleEndian) {
-  // 64 ビット数を 2 つの 32 ビット (4 バイト) の部分に分割する
-  const left =  dataview.getUint32(byteOffset, littleEndian);
-  const right = dataview.getUint32(byteOffset+4, littleEndian);
-
-  // 2 つの 32 ビットの値を結合する
-  const combined = littleEndian? left + 2**32*right : 2**32*left + right;
-
-  if (!Number.isSafeInteger(combined))
-    console.warn(combined, 'exceeds MAX_SAFE_INTEGER. Precision may be lost');
-
-  return combined;
-}
-
- -

他にも、完全な 64 ビットの幅が必要な場合、{{jsxref("BigInt")}} を作成することもできます。さらに言えば、ネイティブの BigInt がユーザーランドライブラリの同等品よりもはるかに速いのですが、JavaScript では BigInt は可変長であるという性質上、常に 32 ビット整数よりもはるかに遅くなります。

- -
const BigInt = window.BigInt, bigThirtyTwo = BigInt(32), bigZero = BigInt(0);
-function getUint64BigInt(dataview, byteOffset, littleEndian) {
-  // 64 ビット数を 2 つの 32 ビット (4 バイト) の部分に分割する
-  const left = BigInt(dataview.getUint32(byteOffset|0, !!littleEndian)>>>0);
-  const right = BigInt(dataview.getUint32((byteOffset|0) + 4|0, !!littleEndian)>>>0);
-
-  // 2 つの 32 ビットの値を結合して返す
-  return littleEndian ? (right<<bigThirtyTwo)|left : (left<<bigThirtyTwo)|right;
-}
- -

コンストラクタ

- -
-
DataView()
-
新しい DataView オブジェクトを作成します。
-
- -

インスタンスプロパティ

- -
-
{{jsxref("DataView.prototype.buffer")}}
-
このビューによって参照される {{jsxref("ArrayBuffer")}} 。構築時に設定されるため、読取専用です。
-
{{jsxref("DataView.prototype.byteLength")}}
-
{{jsxref("ArrayBuffer")}} の開始位置からこのビューの(バイト単位の)長さ。構築時に設定されるため、読取専用です。
-
{{jsxref("DataView.prototype.byteOffset")}}
-
{{jsxref("ArrayBuffer")}} の開始位置からこのビューの(バイト単位の)オフセット。構築時に設定されるため、読取専用です。
-
- -

インスタンスメソッド

- -
-
{{jsxref("DataView.prototype.getInt8()")}}
-
ビューの開始位置から指定されたバイト単位のオフセットで符号付き 8 ビット整数値(byte)を取得します。
-
{{jsxref("DataView.prototype.getUint8()")}}
-
ビューの開始位置から指定されたバイト単位のオフセットで符号無し 8 ビット整数値(unsigned byte) を取得します。
-
{{jsxref("DataView.prototype.getInt16()")}}
-
ビューの開始位置から指定されたバイト単位のオフセットで符号付き 16 ビット整数値(short)を取得します。
-
{{jsxref("DataView.prototype.getUint16()")}}
-
ビューの開始位置からの指定されたバイト単位のオフセットで符号無し 16 ビット整数値(unsigned short)を取得します。
-
{{jsxref("DataView.prototype.getInt32()")}}
-
ビューの開始位置からの指定されたバイト単位のオフセットで符号あり 32 ビット整数値(long)を取得します。
-
{{jsxref("DataView.prototype.getUint32()")}}
-
ビューの開始位置からの指定されたバイト単位のオフセットで符号無し 32 ビット整数値(unsigned long)を取得します。
-
{{jsxref("DataView.prototype.getFloat32()")}}
-
ビューの開始位置からの指定されたバイト単位のオフセットで符号あり 32 ビット浮動小数点数(float)を取得します。
-
{{jsxref("DataView.prototype.getFloat64()")}}
-
ビューの開始位置からの指定されたバイト単位のオフセットで符号あり 64 ビット浮動小数点数(double)を取得します。
-
{{jsxref("DataView.prototype.getBigInt64()")}}
-
ビューの開始位置からの指定されたバイト単位のオフセットで符号あり 64 ビット整数値(long long)を取得します。
-
{{jsxref("DataView.prototype.getBigUint64()")}}
-
ビューの開始位置からの指定されたバイト単位のオフセットで符号なし 64 ビット整数値(unsigned long long)を取得します。
-
{{jsxref("DataView.prototype.setInt8()")}}
-
ビューの開始位置からの指定されたバイト単位のオフセットで符号あり 8 ビット整数値(byte)を格納します。
-
{{jsxref("DataView.prototype.setUint8()")}}
-
ビューの開始位置からの指定されたバイト単位のオフセットで符号なし 8 ビット整数値(unsigned byte)を格納します。
-
{{jsxref("DataView.prototype.setInt16()")}}
-
ビューの開始位置からの指定されたバイト単位のオフセットで符号あり 16 ビット整数値(short)を格納します。
-
{{jsxref("DataView.prototype.setUint16()")}}
-
ビューの開始位置からの指定されたバイト単位のオフセットで符号無し 16 ビット整数値(unsigned short)を格納します。
-
{{jsxref("DataView.prototype.setInt32()")}}
-
ビューの開始位置からの指定されたバイト単位のオフセットで符号あり 32 ビット整数値(long)を格納します。
-
{{jsxref("DataView.prototype.setUint32()")}}
-
ビューの開始位置からの指定されたバイト単位のオフセットで符号無し 32 ビット整数値(unsigned long)を格納します。
-
{{jsxref("DataView.prototype.setFloat32()")}}
-
ビューの開始位置からの指定されたバイト単位のオフセットで符号あり 32 ビット浮動小数点数(float)を格納します。
-
{{jsxref("DataView.prototype.setFloat64()")}}
-
ビューの開始位置からの指定されたバイト単位のオフセットで符号あり 64 ビット浮動小数点数(double)を格納します。
-
{{jsxref("DataView.prototype.setBigInt64()")}}
-
ビューの開始位置からの指定されたバイト単位のオフセットで符号あり 64 ビット整数値(long long)を格納します。
-
{{jsxref("DataView.prototype.setBigUint64()")}}
-
ビューの開始位置からの指定されたバイト単位のオフセットで符号なし 64 ビット整数値(unsigned long long)を格納します。
-
- -

- -

DataView を使用する

- -
var buffer = new ArrayBuffer(16);
-var view = new DataView(buffer, 0);
-
-view.setInt16(1, 42);
-view.getInt16(1); // 42
-
- -

仕様書

- - - - - - - - - - - - - - -
仕様書
{{SpecName('ESDraft', '#sec-dataview-objects', 'DataView')}}
- -

ブラウザーの互換性

- -

{{Compat("javascript.builtins.DataView")}}

- -

関連情報

- - diff --git a/files/ja/web/javascript/reference/global_objects/dataview/index.md b/files/ja/web/javascript/reference/global_objects/dataview/index.md new file mode 100644 index 0000000000..3656042991 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/dataview/index.md @@ -0,0 +1,149 @@ +--- +title: DataView +slug: Web/JavaScript/Reference/Global_Objects/DataView +tags: + - Class + - DataView + - JavaScript + - TypedArrays + - Polyfill +browser-compat: javascript.builtins.DataView +translation_of: Web/JavaScript/Reference/Global_Objects/DataView +--- +{{JSRef}} + +**`DataView`** ビューは {{jsxref("ArrayBuffer")}} の多様な数値型を、プラットフォームの[エンディアン](/ja/docs/Glossary/Endianness)に関係なく読み書きするための低水準インターフェイスを提供します。 + +## 解説 + +### エンディアン + +多バイトの数値形式は、マシンアーキテクチャによってメモリー内での表現が異なります。説明は[エンディアン](/ja/docs/Glossary/Endianness)を参照してください。 `DataView` のアクセサーは、プラットフォームアーキテクチャのエンディアンに関係なくデータにアクセスする方法を明確に制御する手段を提供します。 + +```js +var littleEndian = (function() { + var buffer = new ArrayBuffer(2); + new DataView(buffer).setInt16(0, 256, true /* リトルエンディアン */); + // Int16Array はプラットフォームのエンディアンを使用する + return new Int16Array(buffer)[0] === 256; +})(); +console.log(littleEndian); // true または false +``` + +### 64 ビット整数値 + +一部のブラウザーは {{jsxref("DataView.prototype.setBigInt64()")}} および {{jsxref("DataView.prototype.setBigUint64()")}} に対応していません。そのため、各ブラウザーで動作するコードで 64 ビット操作ができるようにするには、独自の `getUint64()` 関数を実装し、 {{jsxref("Number.MAX_SAFE_INTEGER")}} までの制度の値を受け取れるようにします。これで十分な場合もあるでしょう。 + +```js +function getUint64(dataview, byteOffset, littleEndian) { + // 64 ビット数を 2 つの 32 ビット (4 バイト) の部分に分割する + const left = dataview.getUint32(byteOffset, littleEndian); + const right = dataview.getUint32(byteOffset+4, littleEndian); + + // 2 つの 32 ビットの値を結合する + const combined = littleEndian? left + 2**32*right : 2**32*left + right; + + if (!Number.isSafeInteger(combined)) + console.warn(combined, 'exceeds MAX_SAFE_INTEGER. Precision may be lost'); + + return combined; +} +``` + +他にも、完全な 64 ビットの幅が必要な場合、{{jsxref("BigInt")}} を作成することもできます。さらに言えば、ネイティブの BigInt はユーザーランドライブラリーの同等品よりもはるかに速いのですが、JavaScript では BigInt は可変長であるという性質上、常に 32 ビット整数よりもはるかに遅くなります。 + +```js +const BigInt = window.BigInt, bigThirtyTwo = BigInt(32), bigZero = BigInt(0); +function getUint64BigInt(dataview, byteOffset, littleEndian) { + // 64 ビット数を 2 つの 32 ビット (4 バイト) の部分に分割する + const left = BigInt(dataview.getUint32(byteOffset|0, !!littleEndian)>>>0); + const right = BigInt(dataview.getUint32((byteOffset|0) + 4|0, !!littleEndian)>>>0); + + // 2 つの 32 ビットの値を結合して返す + return littleEndian ? (right<