Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Web/JavaScript/Reference/Global_Objects/TypedArray 他1件を更新 #25133

Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
title: TypedArray
slug: Web/JavaScript/Reference/Global_Objects/TypedArray
l10n:
sourceCommit: c2445ce1dc3a0170e2fbfdbee10e18a7455c2282
sourceCommit: 8421c0cd94fa5aa237c833ac6d24885edbc7d721
---

{{JSRef}}
Expand All @@ -28,6 +28,7 @@ l10n:
| {{jsxref("Uint16Array")}} | 0 から 65535 | 2 | `unsigned short` |
| {{jsxref("Int32Array")}} | -2147483648 から 2147483647 | 4 | `long` |
| {{jsxref("Uint32Array")}} | 0 から 4294967295 | 4 | `unsigned long` |
| {{jsxref("Float16Array")}} | `-65504` から `65504` | 2 | なし |
| {{jsxref("Float32Array")}} | `-3.4E38` から `3.4E38` および `1.2E-38` (最小の正の数) | 4 | `unrestricted float` |
| {{jsxref("Float64Array")}} | `-1.8E308` から `1.8E308` および `5E-324` (最小の正の数) | 8 | `unrestricted double` |
| {{jsxref("BigInt64Array")}} | -2<sup>63</sup> to 2<sup>63</sup> - 1 | 8 | `bigint` |
Expand All @@ -39,7 +40,7 @@ l10n:

- 符号なし整数の配列 (`Uint8Array`, `Uint16Array`, `Uint32Array`, `BigUint64Array`) は、数値を直接バイナリーで格納します。
- 符号付き整数の配列 (`Int8Array`, `Int16Array`, `Int32Array`, `BigInt64Array`) は、数値を [2 の補数](https://ja.wikipedia.org/wiki/2の補数)を用いて格納します。
- 浮動小数点の配列 (`Float32Array`, `Float64Array`) は [IEEE 754](https://ja.wikipedia.org/wiki/IEEE_754) 浮動小数点形式を使用して数値を格納します。 [`Number`](/ja/docs/Web/JavaScript/Reference/Global_Objects/Number#number_encoding) のリファレンスには、正確な形式についての詳細情報があります。 JavaScript の数値は既定では倍精度浮動小数点数で、 `Float64Array` と同じ形式を使用します。 `Float32Array` で仮数に(52 ビットの代わりに)23 ビット、指数に(11 ビットの代わりに) 8 ビットを使用します。仕様では、すべての {{jsxref("NaN")}} 値が同じビットエンコーダ方式を使用することが要求されていますが、正確なビットパターンは実装に依存することに注意してください。
- 浮動小数点の配列 (`Float16Array`, `Float32Array`, `Float64Array`) は [IEEE 754](https://ja.wikipedia.org/wiki/IEEE_754) 浮動小数点形式を使用して数値を格納します。 [`Number`](/ja/docs/Web/JavaScript/Reference/Global_Objects/Number#数値のエンコーディング) のリファレンスには、正確な形式についての詳細情報があります。 JavaScript の数値は既定では倍精度浮動小数点数で、 `Float64Array` と同じ形式を使用します。 `Float32Array` で仮数に(52 ビットの代わりに)23 ビット、指数に(11 ビットの代わりに) 8 ビットを使用します。`Float16Array` で仮数に 10 ビット、指数に 5 ビットを使用します。仕様では、すべての {{jsxref("NaN")}} 値が同じビットエンコーダ方式を使用することが要求されていますが、正確なビットパターンは実装に依存することに注意してください。
- `Uint8ClampedArray` は特殊なケースです。これは `Uint8Array` と同じようにバイナリーで格納されますが、範囲外の数値を格納した場合、最上位ビットを切り捨てるのではなく、数学的な値で 0 から 255 の範囲に数値を丸めます。

`Int8Array`、`Uint8Array`、`Uint8ClampedArray` を除くすべての型付き配列は、各要素を複数のバイトを使用して格納します。これらのバイトは、最上位から最下位(ビッグエンディアン)、または最下位から最上位(リトルエンディアン)の順に並べられます。詳しい説明は[エンディアン](/ja/docs/Glossary/Endianness)を参照してください。型付き配列は常にプラットフォームネイティブのバイト順を使用します。バッファーから読み書きする際にエンディアンを指定したい場合は、代わりに {{jsxref("DataView")}} を使用してください。
Expand All @@ -48,7 +49,7 @@ l10n:

- すべての整数配列(`Uint8ClampedArray`を除く)は[固定幅の数値変換](/ja/docs/Web/JavaScript/Reference/Global_Objects/Number#固定長数値への変換)を使用します。
- `Uint8ClampedArray` は、最初に数値を 0 から 255 の範囲に収めます(255 より大きい値は 255 になり、0 より小さい値は 0 になります)。そして、(切り捨てるのではなく)最も近い整数に丸めます。つまり、 2 つの整数のちょうど中間にある場合は、最も近い偶数の整数に丸めます。例えば、`0.5` は `0`、`1.5` は `2`、`2.5` は `2` となります。
- `Float32Array` では "round to even" を行い、 64 ビット浮動小数点数を 32 ビットに変換します。これは {{jsxref("Math.fround()")}} で指定されたアルゴリズムと同じです。
- `Float16Array` および `Float32Array` では "round to even" を行い、 64 ビット浮動小数点数を 32 ビットおよび 16 ビットに変換します。これは {{jsxref("Math.fround()")}} および {{jsxref("Math.f16round()")}} で指定されたアルゴリズムと同じです。

### サイズ変更可能なバッファー表示時の動作について

Expand Down Expand Up @@ -178,7 +179,7 @@ new TypedArray(buffer, byteOffset, length)

これらのプロパティは `TypedArray` コンストラクターオブジェクトで定義されており、したがってすべての `TypedArray` サブクラスのコンストラクターで共有されます。

- {{jsxref("TypedArray/@@species", "TypedArray[@@species]")}}
- [`TypedArray[Symbol.species]`](/ja/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/Symbol.species)
- : 派生オブジェクトを作成するために使用されるコンストラクター関数です。

すべての `TypedArray` サブクラスには以下の静的プロパティもあります。
Expand Down Expand Up @@ -209,8 +210,8 @@ new TypedArray(buffer, byteOffset, length)
- : インスタンスオブジェクトを作成したコンストラクター関数です。`TypedArray.prototype.constructor` は隠された `TypedArray` のコンストラクター関数ですが、型付き配列のサブクラスはそれぞれ `constructor` プロパティを定義しています。
- {{jsxref("TypedArray.prototype.length")}}
- : 型付き配列内に保持された要素の数を返します。
- `TypedArray.prototype[@@toStringTag]`
- : [`TypedArray.prototype[@@toStringTag]`](/ja/docs/Web/JavaScript/Reference/Global_Objects/Symbol/toStringTag) プロパティの初期値はゲッターで、型付き配列ののコンストラクター名と同じ文字列を返します。このプロパティは `this` の値が型付き配列のサブクラスのいずれでもない場合、 `undefined` を返します。このプロパティは {{jsxref("Object.prototype.toString()")}} で使用されます。ただし、`TypedArray` は独自の [`toString()`](/ja/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/toString) メソッドを持っているので、このプロパティは[`Object.prototype.toString.call()`](/ja/docs/Web/JavaScript/Reference/Global_Objects/Function/call)を `thisArg` に型付き配列を設定して呼び出差ない限り、このプロパティの使用されません。
- `TypedArray.prototype[Symbol.toStringTag]`
- : [`TypedArray.prototype[Symbol.toStringTag]`](/ja/docs/Web/JavaScript/Reference/Global_Objects/Symbol/toStringTag) プロパティの初期値はゲッターで、型付き配列ののコンストラクター名と同じ文字列を返します。このプロパティは `this` の値が型付き配列のサブクラスのいずれでもない場合、 `undefined` を返します。このプロパティは {{jsxref("Object.prototype.toString()")}} で使用されます。ただし、`TypedArray` は独自の [`toString()`](/ja/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/toString) メソッドを持っているので、このプロパティは[`Object.prototype.toString.call()`](/ja/docs/Web/JavaScript/Reference/Global_Objects/Function/call)を `thisArg` に型付き配列を設定して呼び出差ない限り、このプロパティの使用されません。

すべての `TypedArray` のサブクラスには、以下のインスタンスプロパティもあります。

Expand Down Expand Up @@ -283,7 +284,7 @@ new TypedArray(buffer, byteOffset, length)
- : 配列内のそれぞれの位置に対する値を含む新しい配列イテレーターオブジェクトを返します。 {{jsxref("Array.prototype.values()")}} も参照してください。
- {{jsxref("TypedArray.prototype.with()")}}
- : 指定された位置の要素を指定された値で置き換えた新しい配列を、元の配列に変更を加えることなく返します。
- [`TypedArray.prototype[@@iterator]()`](/ja/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/@@iterator)
- [`TypedArray.prototype[Symbol.iterator]()`](/ja/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/Symbol.iterator)
- : 配列内でそれぞれの位置に対する値を含む新しい配列イテレーターオブジェクトを返します。

## 例
Expand Down
Original file line number Diff line number Diff line change
@@ -1,16 +1,15 @@
---
title: TypedArray[@@species]
title: TypedArray[Symbol.species]
slug: Web/JavaScript/Reference/Global_Objects/TypedArray/Symbol.species
original_slug: Web/JavaScript/Reference/Global_Objects/TypedArray/@@species
l10n:
sourceCommit: bf81c9ed7de8cfd94cf1fc7f77e23b987f753a8b
sourceCommit: 8421c0cd94fa5aa237c833ac6d24885edbc7d721
---

{{JSRef}}

**`TypedArray[@@species]`** は静的アクセサープロパティで、型付き配列のメソッドの返値を構築するのに使われるコンストラクターを返します。
**`TypedArray[Symbol.species]`** は静的アクセサープロパティで、型付き配列のメソッドの返値を構築するのに使われるコンストラクターを返します。

> **警告:** `@@species` が存在すると、任意のコードの実行が可能になり、セキュリティ上の脆弱性を生み出す可能性があります。また、特定の最適化も非常に難しくなります。エンジンの実装者は[この機能を削除するかどうか調査](https://github.com/tc39/proposal-rm-builtin-subclassing)しています。可能であれば、この機能に頼ることは避けてください。
> **警告:** `[Symbol.species]` が存在すると、任意のコードの実行が可能になり、セキュリティ上の脆弱性を生み出す可能性があります。また、特定の最適化も非常に難しくなります。エンジンの実装者は[この機能を削除するかどうか調査](https://github.com/tc39/proposal-rm-builtin-subclassing)しています。可能であれば、この機能に頼ることは避けてください。

## 構文

Expand All @@ -20,11 +19,11 @@ TypedArray[Symbol.species]

### 返値

`get @@species` が呼び出されたコンストラクター (`this`) の値です。この返値は、新しい型付き配列を生成する型付き配列のメソッドで、返値を構築するために使用されます。
`get [Symbol.species]` が呼び出されたコンストラクター (`this`) の値です。この返値は、新しい型付き配列を生成する型付き配列のメソッドで、返値を構築するために使用されます。

## 解説

`@@species` アクセサープロパティは、[型付き配列](/ja/docs/Web/JavaScript/Reference/Global_Objects/TypedArray#typedarray_オブジェクト)オブジェクトの既定のコンストラクターを返します。サブクラスのコンストラクターは、コンストラクターの割り当てを変更するために、これをオーバーライドできます。
`[Symbol.species]` アクセサープロパティは、[型付き配列](/ja/docs/Web/JavaScript/Reference/Global_Objects/TypedArray#typedarray_オブジェクト)オブジェクトの既定のコンストラクターを返します。サブクラスのコンストラクターは、コンストラクターの割り当てを変更するために、これをオーバーライドできます。

```js
// 説明のための仮の基盤実装
Expand All @@ -35,16 +34,16 @@ class TypedArray {
}
```

この多態的な実装のために、派生したサブクラスの `@@species` も、既定ではコンストラクターそのものを返すことになります。
この多態的な実装のために、派生したサブクラスの `[Symbol.species]` も、既定ではコンストラクターそのものを返すことになります。

```js
class SubTypedArray extends Int8Array {}
SubTypedArray[Symbol.species] === SubTypedArray; // true
```

既存の配列を変更せず、新しい配列のインスタンスを返す型付き配列のメソッド(例えば、 [`filter()`](/ja/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/filter) や [`map()`](/ja/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/map))を呼び出した場合、配列の `constructor[@@species]` にアクセスすることになります。返されたコンストラクターは、配列の型付き配列メソッドの返値を構築するために使用されます。
既存の配列を変更せず、新しい配列のインスタンスを返す型付き配列のメソッド(例えば、 [`filter()`](/ja/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/filter) や [`map()`](/ja/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/map))を呼び出した場合、配列の `constructor[Symbol.species]` にアクセスすることになります。返されたコンストラクターは、配列の型付き配列メソッドの返値を構築するために使用されます。

しかし、[`Array[@@species]`](/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/@@species) とは異なり、`@@species` を使って型付き配列を新しく作成する場合、言語が新しく作成する配列が正しい型付き配列であり、元の配列と同じ種類の内容を持つことを確認するようになっています。例えば、{{jsxref("BigInt64Array")}} から {{jsxref("Float64Array")}} を作成したり、BigInt の配列から BigInt ではない配列を作成することはできません。この場合、{{jsxref("TypeError")}} が発生します。
しかし、[`Array[Symbol.species]`](/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/Symbol.species) とは異なり、`[Symbol.species]` を使って型付き配列を新しく作成する場合、言語が新しく作成する配列が正しい型付き配列であり、元の配列と同じ種類の内容を持つことを確認するようになっています。例えば、{{jsxref("BigInt64Array")}} から {{jsxref("Float64Array")}} を作成したり、BigInt の配列から BigInt ではない配列を作成することはできません。この場合、{{jsxref("TypeError")}} が発生します。

```js
class BadArray extends Int8Array {
Expand Down Expand Up @@ -78,7 +77,7 @@ Float32Array[Symbol.species]; // function Float32Array()

### 派生オブジェクトの species

独自の `TypedArray` のサブクラス(例えば `MyTypedArray`)のインスタンスでは、`MyTypedArray` の species は `MyTypedArray` コンストラクターとなります。しかし、派生クラスのメソッドで親の[型付き配列](/ja/docs/Web/JavaScript/Reference/Global_Objects/TypedArray#typedarray_objects)オブジェクトを返すために、これを上書きしたい場合があります。
独自の `TypedArray` のサブクラス(例えば `MyTypedArray`)のインスタンスでは、`MyTypedArray` の species は `MyTypedArray` コンストラクターとなります。しかし、派生クラスのメソッドで親の[型付き配列](/ja/docs/Web/JavaScript/Reference/Global_Objects/TypedArray#typedarray_オブジェクト)オブジェクトを返すために、これを上書きしたい場合があります。

```js
class MyTypedArray extends Uint8Array {
Expand Down
Loading