TypedArray
Baseline
Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since 2015年7月.
TypedArray オブジェクトã¯ã€èƒŒå¾Œã«ã‚ã‚‹ãƒã‚¤ãƒŠãƒªãƒ¼ãƒ‡ãƒ¼ã‚¿ãƒãƒƒãƒ•ァーã®ã€é…列風ã®ãƒ“ューを表ã—ã¾ã™ã€‚ TypedArray ã¨ã„ã†åç§°ã®ã‚°ãƒãƒ¼ãƒãƒ«ãƒ—ãƒãƒ‘ティãŒã‚ã‚‹ã‚ã‘ã§ã¯ãªãã€ã¾ãŸç›´æŽ¥ TypedArray コンストラクターãŒè¦‹ãˆã‚‹ã‚ã‘ã§ã¯ã‚りã¾ã›ã‚“。代ã‚りã«ã€ã•ã¾ã–ã¾ãªã‚°ãƒãƒ¼ãƒãƒ«ãƒ—ãƒãƒ‘ティãŒã‚りã€ãれらã®å€¤ã¯å¾Œè¿°ã™ã‚‹ã‚ˆã†ã«ç‰¹å®šã®è¦ç´ ã®åž‹ã«ãŠã‘る型付ãé…列ã®ã‚³ãƒ³ã‚¹ãƒˆãƒ©ã‚¯ã‚¿ãƒ¼ã«ãªã‚Šã¾ã™ã€‚下記ã®ãƒšãƒ¼ã‚¸ã§ã€ãれãžã‚Œã®è¦ç´ ã‚’æŒã¤ç‰‡å¼•ãé…列ã§ä½¿ç”¨ã§ãる共通ã®ãƒ—ãƒãƒ‘ティやメソッドを確èªã§ãã¾ã™ã€‚
解説
TypedArray コンストラクター(よã %TypedArray% ã¨è¡¨è¨˜ã•れã¾ã™ã€‚JavaScript プãƒã‚°ãƒ©ãƒ ã«å…¬é–‹ã•れるグãƒãƒ¼ãƒãƒ«ã«å¯¾å¿œã™ã‚‹ã‚‚ã®ãŒã‚ã‚‹ã‚ã‘ã§ã¯ãªã„ãŸã‚ã€ã€Œå€‹åˆ¥ã®ã‚‚ã®ã€ã‚’表ã™ãŸã‚ã§ã™ï¼‰ã¯ã€ã™ã¹ã¦ã® TypedArray ã®ã‚µãƒ–クラスã®å…±é€šã®ã‚¹ãƒ¼ãƒ‘ークラスã¨ã—ã¦æ©Ÿèƒ½ã—ã¾ã™ã€‚%TypedArray% ã¯ã™ã¹ã¦ã®åž‹ä»˜ãé…列ã®ã‚µãƒ–クラスã«å¯¾ã—ã¦ãƒ¦ãƒ¼ãƒ†ã‚£ãƒªãƒ†ã‚£ãƒ¡ã‚½ãƒƒãƒ‰ã®å…±é€šã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイスをæä¾›ã™ã‚‹ã€ŒæŠ½è±¡ã‚¯ãƒ©ã‚¹ã€ã§ã‚ã‚‹ã¨è€ƒãˆã¦ãã ã•ã„。ã“ã®ã‚³ãƒ³ã‚¹ãƒˆãƒ©ã‚¯ã‚¿ãƒ¼ã¯ç›´æŽ¥å…¬é–‹ã•れã¦ã„ã¾ã›ã‚“。グãƒãƒ¼ãƒãƒ«ãƒ—ãƒãƒ‘ティã§ã‚ã‚‹ TypedArray プãƒãƒ‘ティã¯å˜åœ¨ã—ã¾ã›ã‚“。Object.getPrototypeOf(Int8Array) ãªã©ã‚’通ã—ã¦ã®ã¿ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚
TypedArray ã®ã‚µãƒ–クラス(例ãˆã° Int8Array)ã®ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ã‚’作æˆã™ã‚‹éš›ã€é…列ãƒãƒƒãƒ•ァーãŒãƒ¡ãƒ¢ãƒªãƒ¼ã«å†…部作æˆã•れるã‹ã€ã‚³ãƒ³ã‚¹ãƒˆãƒ©ã‚¯ã‚¿ãƒ¼ã®å¼•æ•°ã« ArrayBuffer ã‚ªãƒ–ã‚¸ã‚§ã‚¯ãƒˆãŒæŒ‡å®šã•れるã¨ã€ä»£ã‚りã«ãã® ArrayBuffer を使用ã—ã¾ã™ã€‚ãƒãƒƒãƒ•ァーアドレスã¯ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ã®å†…部プãƒãƒ‘ティã¨ã—ã¦ä¿å˜ã•れã€%TypedArray%.prototype ã®ã™ã¹ã¦ã®ãƒ¡ã‚½ãƒƒãƒ‰ãŒãã®é…列ãƒãƒƒãƒ•ァーアドレスã«åŸºã¥ã„ã¦å€¤ã‚’è¨å®šã—ãŸã‚Šå–å¾—ã—ãŸã‚Šã—ã¾ã™ã€‚
TypedArray オブジェクト
| åž‹ | 値ã®ç¯„囲 | サイズ (ãƒã‚¤ãƒˆæ•°) | Web IDL åž‹ |
|---|---|---|---|
Int8Array |
-128 ã‹ã‚‰ 127 | 1 | byte |
Uint8Array |
0 ã‹ã‚‰ 255 | 1 | octet |
Uint8ClampedArray |
0 ã‹ã‚‰ 255 | 1 | octet |
Int16Array |
-32768 ã‹ã‚‰ 32767 | 2 | short |
Uint16Array |
0 ã‹ã‚‰ 65535 | 2 | unsigned short |
Int32Array |
-2147483648 ã‹ã‚‰ 2147483647 | 4 | long |
Uint32Array |
0 ã‹ã‚‰ 4294967295 | 4 | unsigned long |
Float16Array |
-65504 ã‹ã‚‰ 65504 |
2 | ãªã— |
Float32Array |
-3.4E38 ã‹ã‚‰ 3.4E38 ãŠã‚ˆã³ 1.2E-38 (最å°ã®æ£ã®æ•°ï¼‰ |
4 | unrestricted float |
Float64Array |
-1.8E308 ã‹ã‚‰ 1.8E308 ãŠã‚ˆã³ 5E-324 (最å°ã®æ£ã®æ•°ï¼‰ |
8 | unrestricted double |
BigInt64Array |
-263 to 263 - 1 | 8 | bigint |
BigUint64Array |
0 to 264 - 1 | 8 | bigint |
値ã®ã‚¨ãƒ³ã‚³ãƒ¼ãƒ‰æ–¹å¼ã¨æ£è¦åŒ–
ã™ã¹ã¦ã®åž‹ä»˜ãé…列㯠ArrayBuffer ã‚’æ“作ã—ã¦ã€å„è¦ç´ ã®æ£ç¢ºãªãƒã‚¤ãƒˆè¡¨ç¾ã‚’見るã“ã¨ãŒã§ãã¾ã™ã®ã§ã€æ•°å€¤ãŒãƒã‚¤ãƒŠãƒªãƒ¼å½¢å¼ã§ã©ã®ã‚ˆã†ã«ã‚¨ãƒ³ã‚³ãƒ¼ãƒ‰ã•れã¦ã„ã‚‹ã‹ãŒé‡è¦ã§ã™ã€‚
- 符å·ãªã—æ•´æ•°ã®é…列 (
Uint8Array,Uint16Array,Uint32Array,BigUint64Array) ã¯ã€æ•°å€¤ã‚’直接ãƒã‚¤ãƒŠãƒªãƒ¼ã§æ ¼ç´ã—ã¾ã™ã€‚ - 符å·ä»˜ãæ•´æ•°ã®é…列 (
Int8Array,Int16Array,Int32Array,BigInt64Array) ã¯ã€æ•°å€¤ã‚’ 2 ã®è£œæ•°ã‚’用ã„ã¦æ ¼ç´ã—ã¾ã™ã€‚ - æµ®å‹•å°æ•°ç‚¹ã®é…列 (
Float16Array,Float32Array,Float64Array) 㯠IEEE 754 æµ®å‹•å°æ•°ç‚¹å½¢å¼ã‚’使用ã—ã¦æ•°å€¤ã‚’æ ¼ç´ã—ã¾ã™ã€‚Numberã®ãƒªãƒ•ァレンスã«ã¯ã€æ£ç¢ºãªå½¢å¼ã«ã¤ã„ã¦ã®è©³ç´°æƒ…å ±ãŒã‚りã¾ã™ã€‚ JavaScript ã®æ•°å€¤ã¯æ—¢å®šã§ã¯å€ç²¾åº¦æµ®å‹•å°æ•°ç‚¹æ•°ã§ã€Float64Arrayã¨åŒã˜å½¢å¼ã‚’使用ã—ã¾ã™ã€‚Float32Arrayã§ä»®æ•°ã«ï¼ˆ52 ビットã®ä»£ã‚りã«ï¼‰23 ãƒ“ãƒƒãƒˆã€æŒ‡æ•°ã«ï¼ˆ11 ビットã®ä»£ã‚りã«ï¼‰ 8 ビットを使用ã—ã¾ã™ã€‚Float16Arrayã§ä»®æ•°ã« 10 ãƒ“ãƒƒãƒˆã€æŒ‡æ•°ã« 5 ビットを使用ã—ã¾ã™ã€‚仕様ã§ã¯ã€ã™ã¹ã¦ã®NaN値ãŒåŒã˜ãƒ“ットエンコーダ方å¼ã‚’使用ã™ã‚‹ã“ã¨ãŒè¦æ±‚ã•れã¦ã„ã¾ã™ãŒã€æ£ç¢ºãªãƒ“ットパターンã¯å®Ÿè£…ã«ä¾å˜ã™ã‚‹ã“ã¨ã«æ³¨æ„ã—ã¦ãã ã•ã„。 Uint8ClampedArrayã¯ç‰¹æ®Šãªã‚±ãƒ¼ã‚¹ã§ã™ã€‚ã“れã¯Uint8Arrayã¨åŒã˜ã‚ˆã†ã«ãƒã‚¤ãƒŠãƒªãƒ¼ã§æ ¼ç´ã•れã¾ã™ãŒã€ç¯„å›²å¤–ã®æ•°å€¤ã‚’æ ¼ç´ã—ãŸå ´åˆã€æœ€ä¸Šä½ãƒ“ットを切りæ¨ã¦ã‚‹ã®ã§ã¯ãªãã€æ•°å¦çš„ãªå€¤ã§ 0 ã‹ã‚‰ 255 ã®ç¯„å›²ã«æ•°å€¤ã‚’丸ã‚ã¾ã™ã€‚
Int8Arrayã€Uint8Arrayã€Uint8ClampedArray を除ãã™ã¹ã¦ã®åž‹ä»˜ãé…列ã¯ã€å„è¦ç´ を複数ã®ãƒã‚¤ãƒˆã‚’使用ã—ã¦æ ¼ç´ã—ã¾ã™ã€‚ã“れらã®ãƒã‚¤ãƒˆã¯ã€æœ€ä¸Šä½ã‹ã‚‰æœ€ä¸‹ä½ï¼ˆãƒ“ッグエンディアン)ã€ã¾ãŸã¯æœ€ä¸‹ä½ã‹ã‚‰æœ€ä¸Šä½ï¼ˆãƒªãƒˆãƒ«ã‚¨ãƒ³ãƒ‡ã‚£ã‚¢ãƒ³ï¼‰ã®é †ã«ä¸¦ã¹ã‚‰ã‚Œã¾ã™ã€‚詳ã—ã„説明ã¯ã‚¨ãƒ³ãƒ‡ã‚£ã‚¢ãƒ³ã‚’å‚ç…§ã—ã¦ãã ã•ã„。型付ãé…列ã¯å¸¸ã«ãƒ—ラットフォームãƒã‚¤ãƒ†ã‚£ãƒ–ã®ãƒã‚¤ãƒˆé †ã‚’使用ã—ã¾ã™ã€‚ãƒãƒƒãƒ•ァーã‹ã‚‰èªã¿æ›¸ãã™ã‚‹éš›ã«ã‚¨ãƒ³ãƒ‡ã‚£ã‚¢ãƒ³ã‚’指定ã—ãŸã„å ´åˆã¯ã€ä»£ã‚り㫠DataView を使用ã—ã¦ãã ã•ã„。
ã“れらã®åž‹ä»˜ãé…åˆ—ã«æ›¸ãè¾¼ã‚€å ´åˆã€è¡¨ç¾å¯èƒ½ãªç¯„囲外ã®å€¤ã¯æ£è¦åŒ–ã•れã¾ã™ã€‚
- ã™ã¹ã¦ã®æ•´æ•°é…列(
Uint8ClampedArrayを除ã)ã¯å›ºå®šå¹…ã®æ•°å€¤å¤‰æ›ã‚’使用ã—ã¾ã™ã€‚ Uint8ClampedArrayã¯ã€æœ€åˆã«æ•°å€¤ã‚’ 0 ã‹ã‚‰ 255 ã®ç¯„囲ã«åŽã‚ã¾ã™ï¼ˆ255 より大ãã„値㯠255 ã«ãªã‚Šã€0 よりå°ã•ã„値㯠0 ã«ãªã‚Šã¾ã™ï¼‰ã€‚ãã—ã¦ã€ï¼ˆåˆ‡ã‚Šæ¨ã¦ã‚‹ã®ã§ã¯ãªãï¼‰æœ€ã‚‚è¿‘ã„æ•´æ•°ã«ä¸¸ã‚ã¾ã™ã€‚ã¤ã¾ã‚Šã€ 2 ã¤ã®æ•´æ•°ã®ã¡ã‚‡ã†ã©ä¸é–“ã«ã‚ã‚‹å ´åˆã¯ã€æœ€ã‚‚è¿‘ã„å¶æ•°ã®æ•´æ•°ã«ä¸¸ã‚ã¾ã™ã€‚例ãˆã°ã€0.5ã¯0ã€1.5ã¯2ã€2.5ã¯2ã¨ãªã‚Šã¾ã™ã€‚Float16ArrayãŠã‚ˆã³Float32Arrayã§ã¯ "round to even" を行ã„〠64 ãƒ“ãƒƒãƒˆæµ®å‹•å°æ•°ç‚¹æ•°ã‚’ 32 ビットãŠã‚ˆã³ 16 ビットã«å¤‰æ›ã—ã¾ã™ã€‚ã“れã¯Math.fround()ãŠã‚ˆã³Math.f16round()ã§æŒ‡å®šã•れãŸã‚¢ãƒ«ã‚´ãƒªã‚ºãƒ ã¨åŒã˜ã§ã™ã€‚
サイズ変更å¯èƒ½ãªãƒãƒƒãƒ•ァー表示時ã®å‹•作ã«ã¤ã„ã¦
サイズ変更å¯èƒ½ãªãƒãƒƒãƒ•ァーã®ãƒ“ューã¨ã—㦠TypedArray を作æˆã—ãŸå ´åˆã€TypedArray ãŒé•·ã•を追跡ã™ã‚‹ã‚ˆã†æ§‹ç¯‰ã•れã¦ã„ã‚‹ã‹ã©ã†ã‹ã«ã‚ˆã‚Šã€åŸºç›¤ã®ãƒãƒƒãƒ•ァーをサイズ変更ã—ãŸéš›ã« TypedArray ã®ã‚µã‚¤ã‚ºã«æ§˜ã€…ãªå½±éŸ¿ã‚’与ãˆã¾ã™ã€‚
3ã¤ç›®ã®å¼•数を除外ã—ãŸã‚Šã€undefined を渡ã—ãŸã‚Šã—ã¦ã€å›ºæœ‰ã®ã‚µã‚¤ã‚ºã‚’æŒãŸãªã„型付ãé…列を作æˆã—ãŸå ´åˆã€åž‹ä»˜ãé…列㯠長ã•追跡 ã¨ãªã‚Šã€å¾Œè€…ã®ã‚µã‚¤ã‚ºãŒå¤‰æ›´ã•れるã¨ã€åŸºç›¤ã¨ãªã‚‹ buffer ã«åˆã‚ã›ã¦è‡ªå‹•çš„ã«ã‚µã‚¤ã‚ºå¤‰æ›´ã•れã¾ã™ã€‚
const buffer = new ArrayBuffer(8, { maxByteLength: 16 });
const float32 = new Float32Array(buffer);
console.log(float32.byteLength); // 8
console.log(float32.length); // 2
buffer.resize(12);
console.log(float32.byteLength); // 12
console.log(float32.length); // 3
型付ãé…列を 3 ã¤ç›®ã® length 引数ã§å…·ä½“çš„ãªã‚µã‚¤ã‚ºã‚’指定ã—ã¦ä½œæˆã—ãŸå ´åˆã€å¾Œè€…ãŒå¤§ãããªã£ã¦ã‚‚ buffer ã‚’æ ¼ç´ã™ã‚‹ãŸã‚ã«ã‚µã‚¤ã‚ºã‚’変更ã™ã‚‹ã“ã¨ã¯ã‚りã¾ã›ã‚“。
const buffer = new ArrayBuffer(8, { maxByteLength: 16 });
const float32 = new Float32Array(buffer, 0, 2);
console.log(float32.byteLength); // 8
console.log(float32.length); // 2
console.log(float32[0]); // 0ï¼ˆåˆæœŸå€¤ï¼‰
buffer.resize(12);
console.log(float32.byteLength); // 8
console.log(float32.length); // 2
console.log(float32[0]); // 0ï¼ˆåˆæœŸå€¤ï¼‰
buffer ãŒç¸®å°ã•れるã¨ãã€è¦‹ã¦ã„る型付ãé…列ãŒå¢ƒç•Œã‚’è¶Šãˆã‚‹ã“ã¨ãŒã‚りã€ãã®å ´åˆã€åž‹ä»˜ãé…列ã®ç›£è¦–サイズ㯠0 ã«æ¸›å°‘ã—ã¾ã™ã€‚ã“れã¯ã€é•·ã•追跡を行ã‚ãªã„型付ãé…列ã®é•·ã•ãŒå¤‰åŒ–ã™ã‚‹å”¯ä¸€ã®ã‚±ãƒ¼ã‚¹ã§ã™ã€‚
const buffer = new ArrayBuffer(8, { maxByteLength: 16 });
const float32 = new Float32Array(buffer, 0, 2);
buffer.resize(7);
console.log(float32.byteLength); // 0
console.log(float32.length); // 0
console.log(float32[0]); // undefined
ãã®å¾Œã€ buffer ã‚’å†ã³å¤§ããã—ã¦åž‹ä»˜ãé…åˆ—ã‚’å…ƒã«æˆ»ã›ã°ã€åž‹ä»˜ãé…列ã®ã‚µã‚¤ã‚ºã¯å…ƒã®å€¤ã«æˆ»ã‚Šã¾ã™ã€‚
buffer.resize(8);
console.log(float32.byteLength); // 8
console.log(float32.length); // 2
console.log(float32[0]); // 0 - back in bounds again!
é•·ã•追跡型ã®åž‹ä»˜ãé…列ã§ã‚‚ã€ãƒãƒƒãƒ•ァー㌠byteOffset ã‚’è¶…ãˆã¦ç¸®å°ã•れãŸå ´åˆã€åŒã˜ã“ã¨ãŒèµ·ã“り得る.
const buffer = new ArrayBuffer(8, { maxByteLength: 16 });
const float32 = new Float32Array(buffer, 4);
// float32 ã¯é•·ã•を追跡ã—ã¾ã™ãŒã€4 ãƒã‚¤ãƒˆç›®ã‹ã‚‰ãƒãƒƒãƒ•ァー末尾ã¾ã§ã—ã‹
// æ‹¡å¼µã—ãªã„ã®ã§ã€ãƒãƒƒãƒ•ァー㌠4 ãƒã‚¤ãƒˆã‚ˆã‚ŠçŸããªã‚‹ã‚ˆã†ã«ãƒªã‚µã‚¤ã‚ºã•れる
// ã¨ã€é…列ã®åž‹ãŒç¯„囲外ã«ãªã£ã¦ã—ã¾ã„ã¾ã™ã€‚
buffer.resize(3);
console.log(float32.byteLength); // 0
コンストラクター
ã“ã®ã‚ªãƒ–ジェクトã¯ç›´æŽ¥ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹åŒ–ã§ãã¾ã›ã‚“。new ã§æ§‹ç¯‰ã—よã†ã¨ã™ã‚‹ã¨ TypeError ãŒç™ºç”Ÿã—ã¾ã™ã€‚
new (Object.getPrototypeOf(Int8Array))();
// TypeError: Abstract class TypedArray not directly constructable
ãã®ä»£ã‚りã€Int8Array ã‚„ BigInt64Array ã®ã‚ˆã†ãªç‰¹å®šã®ç¨®é¡žã®åž‹ä»˜ãé…列ã®ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ã‚’作æˆã—ã¦ãã ã•ã„。ã“れらã®ã‚ªãƒ–ジェクトã¯ã€ã™ã¹ã¦ã‚³ãƒ³ã‚¹ãƒˆãƒ©ã‚¯ã‚¿ãƒ¼ã«å…±é€šã®æ§‹æ–‡ã‚’æŒã£ã¦ã„ã¾ã™ã€‚
new TypedArray()
new TypedArray(length)
new TypedArray(typedArray)
new TypedArray(object)
new TypedArray(buffer)
new TypedArray(buffer, byteOffset)
new TypedArray(buffer, byteOffset, length)
ã“ã“ã§ TypedArray ã¯ç‰¹å®šã®åž‹ã®ã‚³ãƒ³ã‚¹ãƒˆãƒ©ã‚¯ã‚¿ãƒ¼ã®ã†ã¡ã®ä¸€ã¤ã‚’表ã—ã¾ã™ã€‚
引数
typedArray-
TypedArrayã®ã‚µãƒ–クラスã®ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ã‚’指定ã—ã¦å‘¼ã³å‡ºã•れるã¨ã€typedArrayãŒæ–°ã—ã„型付ãé…列ã«ã‚³ãƒ”ーã•れã¾ã™ã€‚長整数以外ã®TypedArrayコンストラクターã§ã¯ã€typedArray引数ã«ã¯é•·æ•´æ•°ä»¥å¤–ã®åž‹ä»˜ãé…列ã®ã†ã¡ã®ã„ãšã‚Œã‹ï¼ˆInt32Arrayãªã©ï¼‰ã‚’指定ã—ã¾ã™ã€‚åŒæ§˜ã«ã€é•·æ•´æ•°ã®TypedArrayコンストラクター(BigInt64Arrayã¾ãŸã¯BigUint64Array)ã§ã¯ã€typedArray引数ã«ã¯é•·æ•´æ•°åž‹ã®ã„ãšã‚Œã‹ã—ã‹æŒ‡å®šã§ãã¾ã›ã‚“。typedArrayã®å„値ã¯ã€æ–°ã—ã„é…列ã«ã‚³ãƒ”ーã•れるå‰ã«ã‚³ãƒ³ã‚¹ãƒˆãƒ©ã‚¯ã‚¿ãƒ¼ã®å¯¾å¿œã™ã‚‹åž‹ã«å¤‰æ›ã•れる。新ã—ã„型付ãé…列ã®é•·ã•ã¯typedArrayã®å¼•æ•°ã®é•·ã•ã¨åŒã˜ã«ãªã‚Šã¾ã™ã€‚ object-
TypedArrayインスタンスã§ãªã„オブジェクトã§å‘¼ã³å‡ºã•れãŸå ´åˆã€TypedArray.from()メソッドã¨åŒã˜æ–¹æ³•ã§ã€æ–°ã—ã„型付ãé…列を生æˆã—ã¾ã™ã€‚ lengthçœç•¥å¯-
オブジェクト以外ã§å‘¼ã³å‡ºã•れãŸå ´åˆã€å¼•æ•°ã¯åž‹ä»˜ãé…列ã®é•·ã•を指定ã™ã‚‹æ•°å€¤ã¨ã—ã¦æ‰±ã‚れã¾ã™ã€‚内部é…列ãƒãƒƒãƒ•ァーãŒãƒ¡ãƒ¢ãƒªãƒ¼å†…ã«ä½œæˆã•れã€ã‚µã‚¤ã‚ºã¯
lengthã«BYTES_PER_ELEMENTãƒã‚¤ãƒˆã‚’ä¹—ã˜ãŸã‚‚ã®ã¨ãªã‚Šã€0 ã§æº€ãŸã•れã¾ã™ã€‚ã™ã¹ã¦ã®å¼•数を除外ã™ã‚‹ã¨ã€0ã‚’lengthã¨ã—ã¦ä½¿ç”¨ã™ã‚‹ã“ã¨ã¨åŒã˜ã«ãªã‚Šã¾ã™ã€‚ buffer,byteOffsetçœç•¥å¯,lengthçœç•¥å¯-
ArrayBufferã¾ãŸã¯SharedArrayBufferインスタンスを指定ã—ã€ã•らã«byteOffsetãŠã‚ˆã³length引数を付ã‘ã¦å‘¼ã³å‡ºã™ã¨ã€æŒ‡å®šã—ãŸãƒãƒƒãƒ•ァーをå‚ç…§ã™ã‚‹åž‹ä»˜ãé…列ビューを新ãŸã«ä½œæˆã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚byteOffset(ãƒã‚¤ãƒˆå˜ä½ï¼‰ã¨length(è¦ç´ æ•°ã§ã€ãれãžã‚ŒãŒBYTES_PER_ELEMENTãƒã‚¤ãƒˆã‚’å ã‚ã¾ã™ï¼‰ã®å¼•æ•°ã¯ã€åž‹ä»˜ãé…列ビューãŒå‚ç…§ã™ã‚‹ãƒ¡ãƒ¢ãƒªãƒ¼ç¯„囲を指定ã—ã¾ã™ã€‚両方ã¨ã‚‚çœç•¥ã—ãŸå ´åˆã€bufferã®å…¨ä½“ãŒå‚ç…§ã•れã¾ã™ã€‚lengthã®ã¿ãŒçœç•¥ã•れãŸå ´åˆã€bufferã®byteOffset以é™ã®éƒ¨åˆ†ãŒè¡¨ç¤ºã•れã¾ã™ã€‚lengthãŒçœç•¥ã•れãŸå ´åˆã€åž‹ä»˜ãé…列ã¯é•·ã•追跡ã¨ãªã‚Šã¾ã™ã€‚
例外
ã™ã¹ã¦ã® TypeArray サブクラスã®ã‚³ãƒ³ã‚¹ãƒˆãƒ©ã‚¯ã‚¿ãƒ¼ã¯ã€åŒã˜ã‚ˆã†ã«æ“作ã—ã¾ã™ã€‚ã™ã¹ã¦ã§ä»¥ä¸‹ã®ã‚ˆã†ãªä¾‹å¤–を発生ã™ã‚‹ã“ã¨ãŒã‚りã¾ã™ã€‚
TypeError-
以下ã®ã„ãšã‚Œã‹ã®å ´åˆã«ç™ºç”Ÿã—ã¾ã™ã€‚
typedArrayãŒæ¸¡ã•れãŸãŒã€ç¾åœ¨ã®ã‚³ãƒ³ã‚¹ãƒˆãƒ©ã‚¯ã‚¿ãƒ¼ã¨ã¯ç•°ãªã‚Šé•·æ•´æ•°åž‹ã®ã‚‚ã®ã§ã‚ã£ãŸå ´åˆã€ã¾ãŸã¯ãã®é€†ã€‚typedArrayãŒæ¸¡ã•れãŸãŒã€ãã®ãƒãƒƒãƒ•ァーãŒåˆ†é›¢ã•れã¦ã„ãŸå ´åˆã€ã¾ãŸã¯åˆ†é›¢ã•れãŸbufferãŒç›´æŽ¥æ¸¡ã•れãŸå ´åˆã€‚
RangeError-
以下ã®ã„ãšã‚Œã‹ã®å ´åˆã«ç™ºç”Ÿã—ã¾ã™ã€‚
- æ–°ã—ã„型付ãé…列ã®é•·ã•ãŒé•·ã™ãŽã‚‹ã€‚
buffer(length引数を指定ã—ãªã„å ´åˆï¼‰ã¾ãŸã¯byteOffsetã®é•·ã•ãŒã€æ–°ã—ã„型付ãé…列ã®è¦ç´ ã‚µã‚¤ã‚ºã®æ•´æ•°å€ã§ãªã„。byteOffsetãŒæœ‰åйãªé…列インデックス(0 ã‹ã‚‰ 253 - 1 ã®é–“ã®æ•´æ•°ï¼‰ã§ãªã„。- ãƒãƒƒãƒ•ァーã‹ã‚‰ãƒ“ューを作æˆã™ã‚‹å ´åˆã€å¢ƒç•ŒãŒãƒãƒƒãƒ•ァーã®å¤–å´ã«ãªã‚‹ã€‚è¨€ã„æ›ãˆã‚Œã°ã€
byteOffset + length * TypedArray.BYTES_PER_ELEMENT > buffer.byteLengthã¨ãªã‚‹ã€‚
é™çš„プãƒãƒ‘ティ
ã“れらã®ãƒ—ãƒãƒ‘ティ㯠TypedArray コンストラクターオブジェクトã§å®šç¾©ã•れã¦ãŠã‚Šã€ã—ãŸãŒã£ã¦ã™ã¹ã¦ã® TypedArray サブクラスã®ã‚³ãƒ³ã‚¹ãƒˆãƒ©ã‚¯ã‚¿ãƒ¼ã§å…±æœ‰ã•れã¾ã™ã€‚
TypedArray[Symbol.species]-
派生オブジェクトを作æˆã™ã‚‹ãŸã‚ã«ä½¿ç”¨ã•れるコンストラクター関数ã§ã™ã€‚
ã™ã¹ã¦ã® TypedArray サブクラスã«ã¯ä»¥ä¸‹ã®é™çš„プãƒãƒ‘ティもã‚りã¾ã™ã€‚
TypedArray.BYTES_PER_ELEMENT-
ã•ã¾ã–ã¾ãª
TypedArrayインスタンスã®è¦ç´ ã®ã‚µã‚¤ã‚ºã‚’数値ã§è¿”ã—ã¾ã™ã€‚
é™çš„メソッド
ã“れらã®ãƒ¡ã‚½ãƒƒãƒ‰ã¯ TypedArray コンストラクターオブジェクトã«å®šç¾©ã•れã¦ã„ã‚‹ãŸã‚ã€ã™ã¹ã¦ã® TypedArray ã®ã‚µãƒ–クラスã®ã‚³ãƒ³ã‚¹ãƒˆãƒ©ã‚¯ã‚¿ãƒ¼ã«å…±æœ‰ã•れã¾ã™ã€‚
TypedArray.from()-
é…列風オブジェクトやå復å¯èƒ½ã‚ªãƒ–ジェクトã‹ã‚‰ã€æ–°ãŸãª
TypedArrayを生æˆã—ã¾ã™ã€‚Array.from()ã‚‚ã”覧ãã ã•ã„。 TypedArray.of()-
引数ã«ä¸ŽãˆãŸå€¤ã‚’ã‚‚ã¨ã«ã€æ–°ãŸãª
TypedArrayを生æˆã—ã¾ã™ã€‚Array.of()ã‚‚ã”覧ãã ã•ã„。
インスタンスプãƒãƒ‘ティ
ã“れらã®ãƒ—ãƒãƒ‘ティ㯠TypedArray.prototype オブジェクトã§å®šç¾©ã•れã¦ãŠã‚Šã€ã™ã¹ã¦ã® TypedArray ã®ã‚µãƒ–クラスインスタンスã§å…±æœ‰ã•れã¦ã„ã¾ã™ã€‚
TypedArray.prototype.buffer-
ã“ã®åž‹ä»˜ãé…列ã«ã‚ˆã£ã¦å‚ç…§ã•ã¦ã„ã‚‹
ArrayBufferã‚’è¿”ã—ã¾ã™ã€‚ TypedArray.prototype.byteLength-
型付ãé…列ã®é•·ã•ã‚’ (ãƒã‚¤ãƒˆå˜ä½ã§) è¿”ã—ã¾ã™ã€‚
TypedArray.prototype.byteOffset-
型付ãé…列ã®
ArrayBufferã®å…ˆé ã‹ã‚‰ã®ã‚ªãƒ•セットを (ãƒã‚¤ãƒˆå˜ä½ã§) è¿”ã—ã¾ã™ã€‚ TypedArray.prototype.constructor-
インスタンスオブジェクトを作æˆã—ãŸã‚³ãƒ³ã‚¹ãƒˆãƒ©ã‚¯ã‚¿ãƒ¼é–¢æ•°ã§ã™ã€‚
TypedArray.prototype.constructorã¯éš ã•れãŸTypedArrayã®ã‚³ãƒ³ã‚¹ãƒˆãƒ©ã‚¯ã‚¿ãƒ¼é–¢æ•°ã§ã™ãŒã€åž‹ä»˜ãé…列ã®ã‚µãƒ–クラスã¯ãれãžã‚Œconstructorプãƒãƒ‘ティを定義ã—ã¦ã„ã¾ã™ã€‚ TypedArray.prototype.length-
型付ãé…列内ã«ä¿æŒã•れãŸè¦ç´ ã®æ•°ã‚’è¿”ã—ã¾ã™ã€‚
TypedArray.prototype[Symbol.toStringTag]-
TypedArray.prototype[Symbol.toStringTag]プãƒãƒ‘ティã®åˆæœŸå€¤ã¯ã‚²ãƒƒã‚¿ãƒ¼ã§ã€åž‹ä»˜ãé…列ã®ã®ã‚³ãƒ³ã‚¹ãƒˆãƒ©ã‚¯ã‚¿ãƒ¼åã¨åŒã˜æ–‡å—列を返ã—ã¾ã™ã€‚ã“ã®ãƒ—ãƒãƒ‘ティã¯thisã®å€¤ãŒåž‹ä»˜ãé…列ã®ã‚µãƒ–クラスã®ã„ãšã‚Œã§ã‚‚ãªã„å ´åˆã€undefinedã‚’è¿”ã—ã¾ã™ã€‚ã“ã®ãƒ—ãƒãƒ‘ティã¯Object.prototype.toString()ã§ä½¿ç”¨ã•れã¾ã™ã€‚ãŸã ã—ã€TypedArrayã¯ç‹¬è‡ªã®toString()メソッドをæŒã£ã¦ã„ã‚‹ã®ã§ã€ã“ã®ãƒ—ãƒãƒ‘ティã¯Object.prototype.toString.call()ã‚’thisArgã«åž‹ä»˜ãé…列をè¨å®šã—ã¦å‘¼ã³å‡ºå·®ãªã„é™ã‚Šã€ã“ã®ãƒ—ãƒãƒ‘ティã®ä½¿ç”¨ã•れã¾ã›ã‚“。
ã™ã¹ã¦ã® TypedArray ã®ã‚µãƒ–クラスã«ã¯ã€ä»¥ä¸‹ã®ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ãƒ—ãƒãƒ‘ティもã‚りã¾ã™ã€‚
TypedArray.prototype.BYTES_PER_ELEMENT-
様々ãª
TypedArrayインスタンスã®è¦ç´ ã®å¤§ãã•を数値ã§è¿”ã—ã¾ã™ã€‚
インスタンスメソッド
ã“れらã®ãƒ¡ã‚½ãƒƒãƒ‰ã¯ TypedArray プãƒãƒˆã‚¿ã‚¤ãƒ—オブジェクトã«å®šç¾©ã•れã¦ã„ã‚‹ãŸã‚ã€ã™ã¹ã¦ã® TypedArray サブクラスインスタンスã§å…±æœ‰ã•れã¾ã™ã€‚
TypedArray.prototype.at()-
整数値をå—ã‘å–りã€ãã®ä½ç½®ã«ã‚るアイテムを返ã—ã¾ã™ã€‚ã“ã®ãƒ¡ã‚½ãƒƒãƒ‰ã§ã¯è² ã®æ•´æ•°ã‚’扱ã†ã“ã¨ãŒã§ãã€æœ€å¾Œã®é …ç›®ã‹ã‚‰é€†å‘ãã«æ•°ãˆã¾ã™ã€‚
TypedArray.prototype.copyWithin()-
é…列内ã§ä¸€é€£ã®é…列è¦ç´ をコピーã—ã¾ã™ã€‚
Array.prototype.copyWithin()ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。 TypedArray.prototype.entries()-
é…列内ã®ã™ã¹ã¦ã®ä½ç½®ã«å¯¾ã™ã‚‹ã‚ーï¼å€¤ã®çµ„ã‚’å«ã‚€ã€æ–°ã—ã„é…列イテレーターを返ã—ã¾ã™ã€‚
Array.prototype.entries()ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。 TypedArray.prototype.every()-
é…列内ã®è¦ç´ ã®ã†ã¡ã€æŒ‡å®šã•れãŸãƒ†ã‚¹ãƒˆé–¢æ•°ã‚’満ãŸã•ãªã„è¦ç´ ㌠1 ã¤ã§ã‚‚見ã¤ã‹ã£ãŸå ´åˆã«
falseã‚’è¿”ã—ã¾ã™ã€‚ãれ以外ã®å ´åˆã¯trueã‚’è¿”ã—ã¾ã™ã€‚Array.prototype.every()ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。 TypedArray.prototype.fill()-
é–‹å§‹ä½ç½®ã‹ã‚‰çµ‚了ä½ç½®ã¾ã§ã®ã™ã¹ã¦ã®è¦ç´ ã«å›ºå®šå€¤ã‚’è¨å®šã—ã¾ã™ã€‚
Array.prototype.fill()ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。 TypedArray.prototype.filter()-
与ãˆã‚‰ã‚ŒãŸãƒ•ィルタリング関数ãŒ
trueã‚’è¿”ã™é…列ã®ã™ã¹ã¦ã®è¦ç´ ã‚’ã‚‚ã¤æ–°ã—ã„é…列を生æˆã—ã¾ã™ã€‚Array.prototype.filter()ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。 TypedArray.prototype.find()-
é…列è¦ç´ ãŒä¸Žãˆã‚‰ã‚ŒãŸãƒ†ã‚¹ãƒˆé–¢æ•°ã‚’満足ã—ãŸã‚‰ã€é…列ã®å€¤ã‚’è¿”ã—ã¾ã™ã€‚満足ã—ãªã‹ã£ãŸå ´åˆã€
undefinedã‚’è¿”ã—ã¾ã™ã€‚Array.prototype.find()ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。 TypedArray.prototype.findIndex()-
é…列è¦ç´ ãŒä¸Žãˆã‚‰ã‚ŒãŸãƒ†ã‚¹ãƒˆé–¢æ•°ã‚’満足ã—ãŸã‚‰ã€é…列ã®ã‚¤ãƒ³ãƒ‡ãƒƒã‚¯ã‚¹ã‚’è¿”ã—ã¾ã™ã€‚満足ã—ãªã‹ã£ãŸå ´åˆã¯
-1ã‚’è¿”ã—ã¾ã™ã€‚Array.prototype.findIndex()ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。 TypedArray.prototype.findLast()-
指定ã•れãŸãƒ†ã‚¹ãƒˆé–¢æ•°ã‚’満ãŸã™é…åˆ—ã®æœ€å¾Œã®è¦ç´ ã®å€¤ã‚’è¿”ã—ã€é©åˆ‡ãªè¦ç´ ãŒå¾—られãªã‹ã£ãŸå ´åˆã¯
undefinedã‚’è¿”ã—ã¾ã™ã€‚Array.prototype.findLast()ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。 TypedArray.prototype.findLastIndex()-
指定ã•れãŸãƒ†ã‚¹ãƒˆé–¢æ•°ã‚’満ãŸã™é…åˆ—ã®æœ€å¾Œã®è¦ç´ ã®ã‚¤ãƒ³ãƒ‡ãƒƒã‚¯ã‚¹ã‚’è¿”ã—ã€é©åˆ‡ãªè¦ç´ ãŒè¦‹ã¤ã‹ã‚‰ãªã‹ã£ãŸå ´åˆã¯
-1ã‚’è¿”ã—ã¾ã™ã€‚Array.prototype.findLastIndex()ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。 TypedArray.prototype.forEach()-
é…列内ã®å„è¦ç´ ã«å¯¾ã™ã‚‹é–¢æ•°ã‚’呼ã³å‡ºã—ã¾ã™ã€‚
Array.prototype.forEach()ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。 TypedArray.prototype.includes()-
型付ãé…列ã«ã‚ã‚‹è¦ç´ ãŒå«ã¾ã‚Œã¦ã„ã‚‹ã‹ã©ã†ã‹åˆ¤æ–ã—ã€ãれã«å¿œã˜ã¦
trueã¾ãŸã¯falseã‚’è¿”ã—ã¾ã™ã€‚Array.prototype.includes()ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。 TypedArray.prototype.indexOf()-
指定ã•れãŸå€¤ã«ç‰ã—ã„é…列内ã®è¦ç´ ã®æœ€åˆã®ä½ç½®ã‚’è¿”ã—ã¾ã™ã€‚見ã¤ã‹ã‚‰ãªã‹ã£ãŸå ´åˆã¯
-1ã‚’è¿”ã—ã¾ã™ã€‚Array.prototype.indexOf()ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。 TypedArray.prototype.join()-
ã™ã¹ã¦ã®é…列è¦ç´ ã‚’ 1 ã¤ã®æ–‡å—列ã«çµåˆã—ã¾ã™ã€‚
Array.prototype.join()ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。 TypedArray.prototype.keys()-
é…列内ã®ãれãžã‚Œã®ä½ç½®ã«å¯¾ã™ã‚‹ã‚ーをå«ã‚€æ–°ã—ã„é…列イテレーターを返ã—ã¾ã™ã€‚
Array.prototype.keys()ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。 TypedArray.prototype.lastIndexOf()-
指定ã•れãŸå€¤ã¨ç‰ã—ã„é…列ã®è¦ç´ ã®æœ€å¾Œã®ä½ç½®ã‚’è¿”ã—ã¾ã™ã€‚見ã¤ã‹ã‚‰ãªã„å ´åˆã¯
-1ã‚’è¿”ã—ã¾ã™ã€‚Array.prototype.lastIndexOf()を確ã‹ã‚ã¦ä¸‹ã•ã„。 TypedArray.prototype.map()-
ã“ã®é…列ã®ã™ã¹ã¦ã®è¦ç´ ã§ä¸Žãˆã‚‰ã‚ŒãŸé–¢æ•°ã‚’呼ã³å‡ºã—ãŸçµæžœã‚’ã‚‚ã¤æ–°ã—ã„é…列を生æˆã—ã¾ã™ã€‚
Array.prototype.map()ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。 TypedArray.prototype.reduce()-
ã‚¢ã‚ュームレーターã¨é…列ã®ãれãžã‚Œã®å€¤ï¼ˆå·¦ã‹ã‚‰å³ã¸ï¼‰ã«å¯¾ã—ã¦é–¢æ•°ã‚’é©ç”¨ã—ã€å˜ä¸€ã®å€¤ã«ã¾ã§ç¸®å°ã—ã¾ã™ã€‚
Array.prototype.reduce()ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。 TypedArray.prototype.reduceRight()-
ã‚¢ã‚ュームレーターã¨é…列ã®ãれãžã‚Œã®å€¤ï¼ˆå³ã‹ã‚‰å·¦ã¸ï¼‰ã«å¯¾ã—ã¦é–¢æ•°ã‚’é©ç”¨ã—ã€å˜ä¸€ã®å€¤ã«ã¾ã§ç¸®å°ã—ã¾ã™ã€‚
Array.prototype.reduce()ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。 TypedArray.prototype.reverse()-
é…列è¦ç´ ã®é †ç•ªã‚’å転ã•ã›ã¾ã™ã€‚ — 最åˆã®è¦ç´ ã¯æœ€å¾Œã«ãªã‚Šã€æœ€å¾Œã®è¦ç´ ã¯æœ€åˆã«ãªã‚Šã¾ã™ã€‚
Array.prototype.reverse()ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。 TypedArray.prototype.set()-
入力値を指定ã—ãŸé…列ã‹ã‚‰èªã¿è¾¼ã¿ã€åž‹ä»˜ãé…列内ã«è¤‡æ•°ã®å€¤ã‚’æ ¼ç´ã—ã¾ã™ã€‚
TypedArray.prototype.slice()-
é…列ã®ä¸€éƒ¨ã‚’å–り出ã—ã¦æ–°ã—ã„é…列を返ã—ã¾ã™ã€‚
Array.prototype.slice()ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。 TypedArray.prototype.some()-
é…åˆ—å†…ã§æŒ‡å®šã•れãŸãƒ†ã‚¹ãƒˆé–¢æ•°ã‚’満ãŸã™è¦ç´ ã‚’ 1 ã¤ã§ã‚‚見ã¤ã‘ãŸå ´åˆã€
trueã‚’è¿”ã—ã¾ã™ã€‚ãれ以外ã®å ´åˆã¯falseã‚’è¿”ã—ã¾ã™ã€‚Array.prototype.some()ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。 TypedArray.prototype.sort()-
é…列ã®è¦ç´ をソートã—ã€ãã®çµæžœã‚’è¿”ã—ã¾ã™ã€‚
Array.prototype.sort()ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。 TypedArray.prototype.subarray()-
与ãˆã‚‰ã‚ŒãŸé–‹å§‹ä½ç½®ã¨çµ‚了ä½ç½®ã®è¦ç´ インデックスã‹ã‚‰ã€æ–°ã—ã„
TypedArrayã‚’è¿”ã—ã¾ã™ã€‚ TypedArray.prototype.toLocaleString()-
é…列ã¨è¦ç´ を表ã™ãƒãƒ¼ã‚«ãƒ©ã‚¤ã‚ºã•ã‚ŒãŸæ–‡å—列を返ã—ã¾ã™ã€‚
Array.prototype.toLocaleString()ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。 TypedArray.prototype.toReversed()-
å…ƒã®é…列を変更ã›ãšã«ã€è¦ç´ ã‚’é€†é †ã«ä¸¦ã¹ãŸæ–°ã—ã„é…列を返ã—ã¾ã™ã€‚
TypedArray.prototype.toSorted()-
å…ƒã®é…列を変更ã›ãšã«ã€è¦ç´ ã‚’æ˜‡é †ã«ä¸¦ã¹ãŸæ–°ã—ã„é…列を返ã—ã¾ã™ã€‚
TypedArray.prototype.toString()-
é…列ã¨è¦ç´ ã‚’è¡¨ã™æ–‡å—列を返ã—ã¾ã™ã€‚
Array.prototype.toString()ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。 TypedArray.prototype.values()-
é…列内ã®ãれãžã‚Œã®ä½ç½®ã«å¯¾ã™ã‚‹å€¤ã‚’å«ã‚€æ–°ã—ã„é…列イテレーターオブジェクトを返ã—ã¾ã™ã€‚
Array.prototype.values()ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。 TypedArray.prototype.with()-
指定ã•れãŸä½ç½®ã®è¦ç´ を指定ã•れãŸå€¤ã§ç½®ãæ›ãˆãŸæ–°ã—ã„é…列をã€å…ƒã®é…列ã«å¤‰æ›´ã‚’åŠ ãˆã‚‹ã“ã¨ãªãè¿”ã—ã¾ã™ã€‚
TypedArray.prototype[Symbol.iterator]()-
é…列内ã§ãれãžã‚Œã®ä½ç½®ã«å¯¾ã™ã‚‹å€¤ã‚’å«ã‚€æ–°ã—ã„é…列イテレーターオブジェクトを返ã—ã¾ã™ã€‚
例
>プãƒãƒ‘ティã¸ã®ã‚¢ã‚¯ã‚»ã‚¹
é…列内ã®è¦ç´ ã¯ã€æ¨™æº–ã®é…åˆ—ã®æ·»å—æ§‹æ–‡ (ã™ãªã‚ã¡ã€ã‹ãŽæ‹¬å¼§ã‚’使用ã™ã‚‹è¡¨è¨˜) を使用ã—ã¦å‚ç…§ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ã—ã‹ã—ã€åž‹ä»˜ãé…列ã§ã‚¤ãƒ³ãƒ‡ãƒƒã‚¯ã‚¹ä»˜ãプãƒãƒ‘ティã§å–å¾—ã¾ãŸã¯è¨å®šã™ã‚‹ã¨ãã¯ã€ç¯„囲外ã®ã‚¤ãƒ³ãƒ‡ãƒƒã‚¯ã‚¹ã§ã‚‚プãƒãƒ‘ティã®ãƒ—ãƒãƒˆã‚¿ã‚¤ãƒ—ãƒã‚§ãƒ¼ãƒ³ã‚’探索ã—ã¾ã›ã‚“。インデックス付ãプãƒãƒ‘ティ㯠ArrayBuffer を調ã¹ã‚‹ã®ã§ã‚りã€ã‚ªãƒ–ジェクトã®ãƒ—ãƒãƒ‘ãƒ†ã‚£ã¯æŽ¢ç´¢ã—ã¾ã›ã‚“。他ã®ã‚ªãƒ–ã‚¸ã‚§ã‚¯ãƒˆåŒæ§˜ã«ã€åå‰ä»˜ãプãƒãƒ‘ティã¯ä½¿ç”¨ã§ãã¾ã™ã€‚
// 標準的ãªé…列構文を使用ã—ã¦è¨å®šãŠã‚ˆã³å–å¾—
const int16 = new Int16Array(2);
int16[0] = 42;
console.log(int16[0]); // 42
// プãƒãƒˆã‚¿ã‚¤ãƒ—ã§ã‚¤ãƒ³ãƒ‡ãƒƒã‚¯ã‚¹ä»˜ãé…列を使用ã—ã¦ã‚‚探索ã—ãªã„ (Fx 25)
Int8Array.prototype[20] = "foo";
new Int8Array(32)[20]; // 0
// even when out of bound
Int8Array.prototype[20] = "foo";
new Int8Array(8)[20]; // undefined
// or with negative integers
Int8Array.prototype[-1] = "foo";
new Int8Array(8)[-1]; // undefined
// åå‰ä»˜ãプãƒãƒ‘ティも利用ã§ãã‚‹ (Fx 30)
Int8Array.prototype.foo = "bar";
new Int8Array(32).foo; // "bar"
å‡çµã§ããªã„
空ã§ãªã„ TypedArray ã¯å‡çµã™ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“。ãã®åŸºç›¤ã§ã‚ã‚‹ ArrayBuffer ã¯ãã®ãƒãƒƒãƒ•ァーã®åˆ¥ã® TypedArray ビューを通ã—ã¦å¤‰æ›´ã•れるå¯èƒ½æ€§ãŒã‚ã‚‹ãŸã‚ã§ã™ã€‚ã“れã¯ã‚ªãƒ–ジェクトãŒç´”粋ã«å‡çµã•れるã“ã¨ãŒãªã„ã“ã¨ã‚’æ„味ã—ã¦ã„ã¾ã™ã€‚
const i8 = Int8Array.of(1, 2, 3);
Object.freeze(i8);
// TypeError: Cannot freeze array buffer views with elements
ByteOffset ã¯æ£è¦åŒ–ã™ã‚‹å¿…è¦ãŒã‚ã‚‹
ArrayBuffer ã«ãƒ“ューã¨ã—㦠TypedArray を構築ã—ãŸå ´åˆã€byteOffset 引数ã¯è¦ç´ サイズã®å¢ƒç•Œã«é…ç½®ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚è¨€ã„æ›ãˆã‚Œã°ã€ã‚ªãƒ•セット㯠BYTES_PER_ELEMENT ã®å€æ•°ã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“。
const i32 = new Int32Array(new ArrayBuffer(4), 1);
// RangeError: start offset of Int32Array should be a multiple of 4
const i32 = new Int32Array(new ArrayBuffer(4), 0);
ByteLength ã¯æ£è¦åŒ–ã™ã‚‹å¿…è¦ãŒã‚ã‚‹
byteOffset 引数ã¨åŒæ§˜ã«ã€TypedArray ã®ã‚³ãƒ³ã‚¹ãƒˆãƒ©ã‚¯ã‚¿ãƒ¼ã«æ¸¡ã•れる ArrayBuffer ã® byteLength プãƒãƒ‘ティもã€ã‚³ãƒ³ã‚¹ãƒˆãƒ©ã‚¯ã‚¿ãƒ¼ã® BYTES_PER_ELEMENT ã®å€æ•°ã«ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚
const i32 = new Int32Array(new ArrayBuffer(3));
// RangeError: byte length of Int32Array should be a multiple of 4
const i32 = new Int32Array(new ArrayBuffer(4));
仕様書
| Specification |
|---|
| ECMAScript® 2026 Language Specification> # sec-typedarray-objects> |