ArrayBuffer
åºçº¿
广æ³å¯ç¨
*
èª 2015å¹´7æ èµ·ï¼æ¤ç¹æ§å·²å¨ä¸»æµæµè§å¨ä¸å¾å°æ¯æï¼å¯å¨å¤§å¤æ°è®¾å¤åæµè§å¨çæ¬ä¸æ£å¸¸ä½¿ç¨ã
* æ¤ç¹æ§çæäºé¨åçæ¯æç¨åº¦å¯è½ææä¸åã
ArrayBuffer å¯¹è±¡ç¨æ¥è¡¨ç¤ºéç¨çåå§äºè¿å¶æ°æ®ç¼å²åºã
宿¯ä¸ä¸ªåèæ°ç»ï¼é常å¨å
¶ä»è¯è¨ä¸ç§°ä¸ºâbyte arrayâãä½ ä¸è½ç´æ¥æä½ ArrayBuffer ä¸çå
容ï¼èæ¯è¦éè¿ç±»ååæ°ç»å¯¹è±¡æ DataView å¯¹è±¡æ¥æä½ï¼å®ä»¬ä¼å°ç¼å²åºä¸çæ°æ®è¡¨ç¤ºä¸ºç¹å®çæ ¼å¼ï¼å¹¶éè¿è¿äºæ ¼å¼æ¥è¯»åç¼å²åºçå
容ã
ArrayBuffer() æé 彿°å建ä¸ä¸ªä»¥åè为åä½çç»å®é¿åº¦çæ° ArrayBufferãä½ ä¹å¯ä»¥ä»ç°æçæ°æ®ï¼ä¾å¦ï¼ä» Base64 å符串æè
仿¬å°æä»¶ï¼è·åæ°ç»ç¼å²åºã
ArrayBuffer æ¯ä¸ä¸ªå¯è½¬ç§»å¯¹è±¡ã
æè¿°
>è°æ´ ArrayBuffer ç大å°
ArrayBuffer 对象å¯ä»¥éè¿å¨è°ç¨ ArrayBuffer() æé 彿°æ¶å
å« maxByteLength é项æ¥ä½¿å
¶å¤§å°å¯åãä½ å¯ä»¥éè¿è®¿é®å
¶ resizable å maxByteLength 屿§æ¥æ¥è¯¢ ArrayBuffer ç大尿¯å¦å¯å以åå
¶æå¤§å¼ãä½ å¯ä»¥éè¿è°ç¨ resize() 为å¯å大å°ç ArrayBuffer åé
ä¸ä¸ªæ°ç大å°ãæ°çåèä¼è¢«åå§å为 0ã
è¿äºç¹æ§ä½¿å¾è°æ´ ArrayBuffer ç大尿´å 髿ââå¦åï¼ä½ å¿
é¡»ä½¿ç¨æ°ç大å°å建ä¸ä¸ªç¼å²å¯æ¬ãè¿ä¹ä½¿å¾ JavaScript å¨è¿æ¹é¢ä¸ WebAssembly ç¸å½ï¼Wasm 线æ§å
åå¯ä»¥ä½¿ç¨ WebAssembly.Memory.prototype.grow() è°æ´å¤§å°ï¼ã
ä¼ è¾ ArrayBuffer
ArrayBuffer 对象å¯ä»¥å¨ä¸åçæ§è¡ä¸ä¸æä¹é´ä¼ è¾ï¼å°±å Web Worker æ Service Worker 飿 ·ï¼ä½¿ç¨ç»æåå
éç®æ³ãè¿å¯ä»¥éè¿å¨ Worker.postMessage() æ ServiceWorker.postMessage() çè°ç¨ä¸ä¼ å
¥ ArrayBuffer 对象ä½ä¸ºå¯è½¬ç§»å¯¹è±¡æ¥å®æãå¨çº¯ JavaScript ä¸ï¼ä¹å¯ä»¥ä½¿ç¨ transfer() æ transferToFixedLength() æ¹æ³æ¥è½¬ç§»å
åçæææã
å½ä¸ä¸ª ArrayBuffer å¯¹è±¡è¢«ä¼ è¾æ¶ï¼å®åæ¥ç坿¬ä¼è¢«å离ï¼detachedï¼ï¼è¿æå³çå®ä¸åå¯ç¨ãå¨ä»»ä½æ¶åï¼åªæä¸ä¸ª ArrayBuffer ç坿¬å®é
æ¥æåºå±å
åãå离çç¼å²åºå
·æä»¥ä¸è¡ä¸ºï¼
byteLengthå为 0ï¼å¨ç¼å²åºåå ³èçç±»ååæ°ç»è§å¾ä¸ï¼ã- ææå®ä¾æ¹æ³ï¼æ¯å¦
resize()åslice()ï¼ä¼å¨è°ç¨æ¶æåºTypeErrorãå ³èçç±»ååæ°ç»è§å¾çæ¹æ³ä¹ä¼æåºTypeErrorã
ä½ å¯ä»¥éè¿å
¶ detached 屿§æ¥æ£æ¥ ArrayBuffer æ¯å¦å·²å离ã
æé 彿°
ArrayBuffer()-
å建ä¸ä¸ªæ°ç
ArrayBuffer对象ã
éæå±æ§
ArrayBuffer[Symbol.species]-
ç¨äºå建派ç对象çæé 彿°ã
éææ¹æ³
ArrayBuffer.isView()-
妿
argæ¯ ArrayBuffer è§å¾ä¹ä¸ï¼åè¿åtrueï¼ä¾å¦ç±»ååæ°ç»å¯¹è±¡æèDataViewãå¦åè¿åfalseã
å®ä¾å±æ§
è¿äºå±æ§å¨ ArrayBuffer.prototype ä¸å®ä¹ï¼å¹¶ç±ææ ArrayBuffer å®ä¾å
±äº«ã
ArrayBuffer.prototype.byteLength-
ArrayBufferç大å°ï¼ä»¥åè为åä½ãå®å¨æé æ¶ç¡®å®ï¼å¹¶ä¸åªæå¨ArrayBufferå¯è°æ´å¤§å°çæ åµä¸æè½éè¿ArrayBuffer.prototype.resize()æ¹æ³è¿è¡æ¹åã ArrayBuffer.prototype.constructor-
å建å®ä¾å¯¹è±¡çæé 彿°ã对äº
ArrayBufferå®ä¾ï¼åå§å¼ä¸ºArrayBufferæé 彿°ã ArrayBuffer.prototype.detached-
åªè¯»ã妿
ArrayBufferå·²å离ï¼ä¼ è¾ï¼ï¼åè¿åtrueï¼å¦åè¿åfalseã ArrayBuffer.prototype.maxByteLength-
åªè¯»ï¼
ArrayBufferå¯ä»¥è°æ´å°çæå¤§åèé¿åº¦ãå®å¨æé æ¶ç¡®å®ï¼å¹¶ä¸æ æ³æ´æ¹ã ArrayBuffer.prototype.resizable-
åªè¯»ã妿
ArrayBufferå¯è°æ´å¤§å°ï¼åè¿åtrueï¼å¦åè¿åfalseã ArrayBuffer.prototype[Symbol.toStringTag]-
[Symbol.toStringTag]屿§çåå§å¼æ¯å符串"ArrayBuffer"ãå®ç¨äºObject.prototype.toString()ã
å®ä¾æ¹æ³
ArrayBuffer.prototype.resize()-
å°
ArrayBufferè°æ´ä¸ºæå®å¤§å°ï¼ä»¥åè为åä½ã ArrayBuffer.prototype.slice()-
è¿åä¸ä¸ªæ°ç
ArrayBuffer对象ï¼å ¶å 容æ¯ä»beginï¼å å«ï¼å°endï¼ä¸å å«ï¼çArrayBufferçåèå 容ç坿¬ã妿beginæendä¸ºè´æ°ï¼åå®å°ä»æ°ç»çæ«å°¾å¼å§è®¡ç®ç´¢å¼ï¼èé仿°ç»çå¼å¤´ã ArrayBuffer.prototype.transfer()-
å建ä¸ä¸ªæ°ç
ArrayBuffer对象ï¼å ¶å 容æ¯ä¸æ¤ç¼å²åºç¸åçåèå 容ï¼ç¶åå离æ¤ç¼å²åºã ArrayBuffer.prototype.transferToFixedLength()-
å建ä¸ä¸ªæ°çä¸å¯è°æ´å¤§å°ç
ArrayBuffer对象ï¼å ¶å 容䏿¤ç¼å²åºç¸åï¼ç¶åå离æ¤ç¼å²åºã
示ä¾
>å建 ArrayBuffer
ä¸é¢çä¾åå建äºä¸ä¸ª 8 åèçç¼å²åºï¼å¹¶ä½¿ç¨ Int32Array è§å¾å¼ç¨å®ã
const buffer = new ArrayBuffer(8);
const view = new Int32Array(buffer);
è§è
| è§è |
|---|
| ECMAScript® 2027 Language Specification > # sec-arraybuffer-objects > |