ArrayBuffer.prototype.transfer()
Baseline
2024
Newly available
Since March 2024, this feature works across the latest devices and browser versions. This feature might not work in older devices or browsers.
transfer() 㯠ArrayBuffer ã¤ã³ã¹ã¿ã³ã¹ã®ã¡ã½ããã§ããã®ãããã¡ã¨åããã¤ãå
容ãæã¤æ°ãã ArrayBuffer ã使ãããã®å¾ã§ãã®ãããã¡ãåé¢ãã¾ãã
æ§æ
transfer()
transfer(newByteLength)
弿°
newByteLengthçç¥å¯-
æ°ãã
ArrayBufferã®byteLengthã§ããããã©ã«ãå¤ã¯ãã®ArrayBufferã®byteLengthã§ããnewByteLengthããã®ArrayBufferã®byteLengthããå°ããå ´åãããªã¼ãã¼ããã¼ããããã¤ãã¯ç ´æ£ããã¾ããnewByteLengthããã®ArrayBufferã®byteLengthãã大ããå ´åãä½åãªãã¤ãã¯ã¼ãã§åãããã¾ãã- ãã®
ArrayBufferããµã¤ãºå¤æ´å¯è½ãªå ´åãnewByteLengthã¯ãã®maxByteLengthãè¶ ãã¦ã¯ãªãã¾ããã
è¿å¤
æ°ãã ArrayBuffer ãªãã¸ã§ã¯ãã§ãããã®å
容ã¯ããã® ArrayBuffer ã®å
容ã§åæåãããä½åãªãã¤ããããå ´åã¯ã¼ãã§åãããã¾ããæ°ãã ArrayBuffer ã¯ããã® ArrayBuffer ããµã¤ãºå¤æ´å¯è½ã§ããå ´åã«ã®ã¿ãµã¤ãºå¤æ´å¯è½ã§ããããã®å ´åããã® maxByteLength ã¯ãã® ArrayBuffer ã®ãã®ã¨åãã«ãªãã¾ããå
ã® ArrayBuffer ã¯åãé¢ããã¾ãã
ä¾å¤
RangeError-
ãã®
ArrayBufferããµã¤ãºå¤æ´å¯è½ã§ãããnewByteLengthããã®ArrayBufferã®maxByteLengthãè¶ ããå ´åã«çºçãã¾ãã TypeError-
ãã®
ArrayBufferãæ¢ã«åé¢ããã¦ããå ´åãã¾ãã¯æå®ãããæä½ã«ãã£ã¦ã®ã¿åé¢å¯è½ãªå ´åã«çºçãã¾ããç¾å¨ãGPUBuffer.getMappedRange()ãWebAssembly.Memory.bufferãªã©ã®ç¹å®ã® Web API ã®ã¿ããæå®ãããåé¢ã¡ã½ãããæã¤ArrayBufferãªãã¸ã§ã¯ãã使ã§ãã¾ãã
解説
transfer() ã¡ã½ããã¯ãæ§é åã¯ãã¼ã³ã¢ã«ã´ãªãºã ã¨åãæä½ãå®è¡ãã¾ãããã® ArrayBuffer ã®ãã¤ããæ°ãã ArrayBuffer ãªãã¸ã§ã¯ãã«ã³ãã¼ãããã®å¾ãã® ArrayBuffer ãªãã¸ã§ã¯ããåé¢ãã¾ãã詳細ã«ã¤ãã¦ã¯ãArrayBuffer ã®ç§»è²ãåç
§ãã¦ãã ããã
transfer() ã¯ãã® ArrayBuffer ã®ãµã¤ãºå¤æ´å¯è½ç¶æ
ãç¶æãã¾ããæ°ãã ArrayBuffer ããµã¤ãºå¤æ´ä¸å¯ã«ãããå ´åã¯ã代ããã« transferToFixedLength() ã使ç¨ãã¦ãã ãããåºå®é·ãããã¡ã¼ããµã¤ãºå¤æ´å¯è½ç¶æ
ã«ãããããã¡ã¼è»¢éæ¹æ³ã¯ããã¾ããã
transfer()ã¯ã¨ã¦ãå¹ççã§ããå®è£
å´ããã®ã¡ã½ãããã¼ãã³ãã¼ç§»åãreallocã¨ãã¦å®è£
ã§ããããããã¼ã¿ã®å®éã®ã³ãã¼ãå¿
è¦ãªãããã§ãã
ä¾
>ArrayBuffer ã®å§è²
// ArrayBuffer ã使ããæ°ãã¤ããæ¸ãè¾¼ã
const buffer = new ArrayBuffer(8);
const view = new Uint8Array(buffer);
view[1] = 2;
view[7] = 4;
// ãããã¡ã¼ãåããµã¤ãºã«ã³ãã¼
const buffer2 = buffer.transfer();
console.log(buffer.detached); // true
console.log(buffer2.byteLength); // 8
const view2 = new Uint8Array(buffer2);
console.log(view2[1]); // 2
console.log(view2[7]); // 4
// ãããã¡ã¼ãããå°ãããµã¤ãºã«ã³ãã¼
const buffer3 = buffer2.transfer(4);
console.log(buffer3.byteLength); // 4
const view3 = new Uint8Array(buffer3);
console.log(view3[1]); // 2
console.log(view3[7]); // undefined
// ãããã¡ã¼ããã大ããªãµã¤ãºã«ã³ãã¼
const buffer4 = buffer3.transfer(8);
console.log(buffer4.byteLength); // 8
const view4 = new Uint8Array(buffer4);
console.log(view4[1]); // 2
console.log(view4[7]); // 0
// å颿¸ã¿ã®å ´åã¯ã TypeError ãçºç
buffer.transfer(); // TypeError: Cannot perform ArrayBuffer.prototype.transfer on a detached ArrayBuffer
ãªãµã¤ãºå¯è½ãª ArrayBuffer ã®å§è²
const buffer = new ArrayBuffer(8, { maxByteLength: 16 });
const view = new Uint8Array(buffer);
view[1] = 2;
view[7] = 4;
// ãããã¡ã¼ãããå°ãããµã¤ãºã«ã³ãã¼
const buffer2 = buffer.transfer(4);
console.log(buffer2.byteLength); // 4
console.log(buffer2.maxByteLength); // 16
const view2 = new Uint8Array(buffer2);
console.log(view2[1]); // 2
console.log(view2[7]); // undefined
buffer2.resize(8);
console.log(view2[7]); // 0
// ãããã¡ã¼ããã大ã㪠maxByteLength ã®ãµã¤ãºã«ã³ãã¼
const buffer3 = buffer2.transfer(12);
console.log(buffer3.byteLength); // 12
// ãããã¡ã¼ã maxByteLength ãã大ããªãµã¤ãºã«ã³ãã¼
buffer3.transfer(20); // RangeError: Invalid array buffer length
仿§æ¸
| Specification |
|---|
| ECMAScript® 2027 Language Specification> # sec-arraybuffer.prototype.transfer> |