JavaScript ã®åä»ãé åã¯é å風ã®ãªãã¸ã§ã¯ãã§ãããã¡ã¢ãªã¼ãããã¡ã¼å ã®çã®ãã¤ããªã¼ãã¼ã¿ãèªã¿æ¸ãããææ®µãæä¾ãã¾ãã
åä»ãé åã¯ããããã種é¡ã®æ©è½ã«ããã¦é åãç½®ãæãããã¨ãæå³ãããã®ã§ã¯ããã¾ããããã¤ããªã¼ãã¼ã¿ãæä½ããããã®ä½¿ãæ £ããã¤ã³ã¿ã¼ãã§ã¤ã¹ãéçºè ã«æä¾ãã¾ããããã¯ãé³å£°ã¨æ åã®æä½ã WebSockets ã使ç¨ãã¦çã®ãã¼ã¿ã«ã¢ã¯ã»ã¹ãããªã©ããã©ãããã©ã¼ã ã®æ©è½ã¨ããã¨ãããéã«å½¹ç«ã¡ã¾ãã JavaScript ã®åä»ãé åã®åé ç®ã¯ã対å¿ãã¦ããæ°å¤ãã®ãã©ã¼ãããã®ãã¡ã® 1 ã¤ã§ã 8 ãããæ´æ°ãã 64 ãããæµ®åå°æ°ç¹æ°ã¾ã§ã®çã®ãã¤ããªã¼å¤ã§ãã
åä»ãé
åãªãã¸ã§ã¯ãã¯ãé
åã¨å¤ãã®ã¡ã½ãããå
±æãã¦ãããåæ§ã®æ©è½ãæã£ã¦ãã¾ããããããåä»ãé
åã¯é常ã®é
åã¨æ··åãããã¹ãã§ã¯ããã¾ãããåä»ãé
åã§ Array.isArray()
ãå¼ã³åºãã¨ãè¿å¤ã«ãã㦠false
ãè¿ããã¾ããããã«ãé常ã®é
åã§å©ç¨ã§ããã¡ã½ããã®ãã¹ã¦ãåä»ãé
åã§å¯¾å¿ãã¦ããããã§ã¯ããã¾ããï¼push ã pop ãªã©ï¼ã
æå¤§éã®æè»æ§ã¨å¹çæ§ãéæããããã«ã JavaScript ã®åä»ãé åã§ã¯ããããã¡ã¼ãã¨ããã¥ã¼ãã«å®è£ ãåãã¦ãã¾ãããããã¡ã¼ã¯ããã¼ã¿ã®å¡ã表ããªãã¸ã§ã¯ãã§ããããã¯ç¹ã«å½¢å¼ããªããã¾ããã®ä¸èº«ã«ã¢ã¯ã»ã¹ããææ®µãæä¾ãã¾ããããããã¡ã¼ã«æ ¼ç´ããã¦ããæ å ±ã«ã¢ã¯ã»ã¹ããã«ã¯ããã¥ã¼ã使ç¨ããå¿ è¦ãããã¾ãããã¥ã¼ã¯ã³ã³ããã¹ãï¼ãã¼ã¿ã®ç¨®é¡ãéå§ä½ç½®ã®ãªãã»ãããè¦ç´ ã®æ°ï¼ãæä¾ãããã¼ã¿ãå®éã®åä»ãé åã«è¿ãã¾ãã
ãããã¡ã¼ãããã¡ã¼ã«ã¯ ArrayBuffer
㨠SharedArrayBuffer
ã® 2 種é¡ãããã¾ããã©ã¡ããã¡ã¢ãªã¼ã®ç¯å²ã®ä½ã¬ãã«ãªè¡¨ç¾ã§ããååã« "array" ï¼é
åï¼ã¨ä»ãã¦ãã¾ãããé
åã¨ã¯ãã¾ãé¢ä¿ãããã¾ãããç´æ¥èªã¿æ¸ããããã¨ã¯ã§ãã¾ããã代ããã«ããããã¡ã¼ã¯çã®ãã¼ã¿ãå«ãä¸è¬çãªãªãã¸ã§ã¯ãã§ãããããã¡ã¼ã«ãã£ã¦è¡¨ç¾ãããã¡ã¢ãªã¼ã«ã¢ã¯ã»ã¹ããã«ã¯ããã¥ã¼ã使ç¨ããå¿
è¦ãããã¾ãã
ãããã¡ã¼ã¯æ¬¡ã®ã¢ã¯ã·ã§ã³ã«å¯¾å¿ãã¦ãã¾ãã
0
ã«ãªãã¾ããslice()
ã¡ã½ããã使ç¨ããã¨ãåãã¤ããæåã§ã³ãã¼ããããã«ãã¥ã¼ã使ãããã¨ãªããã¡ã¢ãªã¼ã®ä¸é¨ãå¹ççã«ã³ãã¼ãããã¨ãã§ãã¾ããtransfer()
ããã³ transferToFixedLength()
ã¡ã½ããã使ç¨ããã¨ãã¡ã¢ãªã¼ç¯å²ã®æææ¨©ãæ°ãããããã¡ã¼ãªãã¸ã§ã¯ãã«ç§»è²ãããã¨ãã§ãã¾ããããã¯ãç°ãªãå®è¡ã³ã³ããã¹ãéã§ãã¼ã¿ãã³ãã¼ããããã¨ãªãç§»åããéã«ä¾¿å©ã§ããç§»è²å¾ã¯ãå
ã®ãããã¡ã¼ã¯ä½¿ç¨ã§ããªããªãã¾ããSharedArrayBuffer
ã¯ç§»è²ã§ãã¾ããï¼ãããã¡ã¼ã¯ãã§ã«ãã¹ã¦ã®å®è¡ã³ã³ããã¹ãã§å
±æããã¦ããããï¼ãresize()
ã¡ã½ããã使ç¨ããã¨ãã¡ã¢ãªã¼ç¯å²ããµã¤ãºå¤æ´ãããã¨ãã§ãã¾ãï¼äºåã«è¨å®ãã maxByteLength
ã®å¶éãè¶
ããªãç¯å²ã§ãããå¤ãã®ã¡ã¢ãªã¼é åã確ä¿ããããä¸é¨ã®ã¡ã¢ãªã¼é åãè§£æ¾ããããããã¨ãã§ãã¾ãï¼ã SharedArrayBuffer
ã¯ä¼¸é·ãããã¨ã¯ã§ãã¾ããã縮å°ãããã¨ã¯ã§ãã¾ãããArrayBuffer
㨠SharedArrayBuffer
ã®éãã¯ãåè
ã¯å¸¸ã«åä¸ã®å®è¡ã³ã³ããã¹ãã«ææããã¦ãããã¨ã§ãã ArrayBuffer
ãç°ãªãå®è¡ã³ã³ããã¹ãã«æ¸¡ãã¨ãããã¯ç§»è²ãããå
ã® ArrayBuffer
ã¯ä½¿ç¨ã§ããªããªãã¾ããããã«ãããåæã«ã¡ã¢ãªã¼ã«ã¢ã¯ã»ã¹ã§ããå®è¡ã³ã³ããã¹ãã¯1ã¤ã ãã§ãããã¨ãä¿è¨¼ããã¾ãã SharedArrayBuffer
ã¯ãç°ãªãå®è¡ã³ã³ããã¹ãã«æ¸¡ãããå ´åã§ãç§»è²ãããªããããåæã«è¤æ°ã®å®è¡ã³ã³ããã¹ãããã¢ã¯ã»ã¹ãããã¨ãã§ãã¾ãã è¤æ°ã®ã¹ã¬ãããåãã¡ã¢ãªã¼ç¯å²ã«ã¢ã¯ã»ã¹ããå ´åã¯ãç«¶åç¶æ
ãçºçããå¯è½æ§ãããããã Atomics
ã¡ã½ãããªã©ã®æä½ãå½¹ç«ã¡ã¾ãã
ç¾å¨ã主㫠2 種é¡ã®ãã¥ã¼ãããã¾ããåä»ãé
åãã¥ã¼ã¨ DataView
ã§ãã åä»ãé
åã¯ããã¤ããªã¼ãã¼ã¿ã便å©ã«å¤æã§ããã¦ã¼ãã£ãªãã£ã¡ã½ãããæä¾ãã¦ãã¾ãã DataView
ã¯ããä½ã¬ãã«ã§ããã¼ã¿ã«ã¢ã¯ã»ã¹ããæ¹æ³ãç´°ããå¶å¾¡ãããã¨ãã§ãã¾ãã 2 ã¤ã®ãã¥ã¼ã使ç¨ãã¦ãã¼ã¿ãèªã¿æ¸ãããæ¹æ³ã¯å¤§ããç°ãªãã¾ãã
ã©ã¡ãã®ãã¥ã¼ã ArrayBuffer.isView()
ã true
ãè¿ãã¾ãã ã©ã¡ããæ¬¡ã®ããããã£ãããã¾ãã
buffer
ãã¥ã¼ãåç §ããåºç¤ãããã¡ã¼ã
byteOffset
ãã¥ã¼ã®ãããã¡ã¼ã®éå§ããã®ãªãã»ããï¼ãã¤ãåä½ï¼ã
byteLength
ãã¥ã¼ã®é·ãï¼ãã¤ãåä½ï¼ã
ã©ã¡ãã®ã³ã³ã¹ãã©ã¯ã¿ã¼ããä¸è¨ 3 ã¤ãå¥åã®å¼æ°ã¨ãã¦åãå
¥ãã¾ãããåä»ãé
åã®ã³ã³ã¹ãã©ã¯ã¿ã¼ã§ã¯ã length
ããã¤ãæ°ã§ã¯ãªãè¦ç´ æ°ã¨ãã¦åãå
¥ãã¾ãã
åä»ãé
åã®ãã¥ã¼ã¯èªèº«ã表ç¾ããåç§°ãæã¡ãInt8
ãUint32
ãFloat64
ãªã©ã®ä¸è¬çãªæ°å¤åã®ãã¥ã¼ãæä¾ãã¾ããç¹å¥ãªåä»ãé
åã®ãã¥ã¼ã¨ã㦠Uint8ClampedArray
ãããã¾ããããã¯ãå¤ã 0
ãã 255
ã®éã«å¶éãã¾ããä¾ãã° Canvas ã®ãã¼ã¿å¦çã«å½¹ç«ã¡ã¾ãã
ãã¹ã¦ã®åä»ãé
åã®ãã¥ã¼ã¯ã TypedArray
ã¯ã©ã¹ã«ãã£ã¦å®ç¾©ãããã¡ã½ããã¨ããããã£ããã¹ã¦æã£ã¦ãã¾ããéãã¯ãåºç¤ã¨ãªããã¼ã¿åã¨ãã¤ãåä½ã®ãµã¤ãºã®ã¿ã§ãã ãã®ç¹ã«ã¤ãã¦ã¯ããå¤ã®ã¨ã³ã³ã¼ãæ¹å¼ã¨æ£è¦åãã§è©³ãã説æãã¦ãã¾ãã
åä»ãé
åã¯ãååã¨ãã¦åºå®é·ã§ãããããé
åã®é·ãã夿´ããå¯è½æ§ã®ããé
åã¡ã½ããã¯å©ç¨ã§ãã¾ãããããã«ã¯ãpop
ãpush
ãshift
ãsplice
ãunshift
ãªã©ãããã¾ãã ã¾ããå
¥ãåã«ãªã£ãåä»ãé
åã¯åå¨ããªããããflat
ãå©ç¨ã§ãã¾ããã ããã«ã concat
ã flatMap
ãªã©ã®ç¸å¯¾ã¡ã½ãããããã¾ãå©ç¨ä¾¡å¤ããªãããå©ç¨ã§ãã¾ãããsplice
ãå©ç¨ã§ããªãããã toSpliced
ãå©ç¨ã§ãã¾ããã ãã®ä»ã®é
åã¡ã½ããã¯ãã¹ã¦ã Array
㨠TypedArray
ã§å
±æããã¦ãã¾ãã
䏿¹ã TypedArray
ã«ã¯ãåããããã¡ã¼ãå
±æããè¤æ°ã®åä»ãé
åã®æä½ãæé©åããã set
ããã³ subarray
ã¡ã½ãããåå¨ãã¾ãã set()
ã¡ã½ããã¯ãå¥ã®é
åã¾ãã¯åä»ãé
åã®ãã¼ã¿ã使ç¨ãã¦ãè¤æ°ã®åä»ãé
åã®æ·»åãä¸åº¦ã«è¨å®ãããã¨ãã§ãã¾ãã 2 ã¤ã®åä»ãé
åãåããããã¡ã¼ãå
±æãã¦ããå ´åãé«éãªã¡ã¢ãªã¼ç§»åã¨ãªããããæä½ãããå¹ççã«ãªãå¯è½æ§ãããã¾ãã subarray()
ã¡ã½ããã¯ãå
ã®åä»ãé
åã¨åããããã¡ã¼ãåç
§ããæ°ããåä»ãé
åãã¥ã¼ã使ãã¾ãããããçãç¯å²ã対象ã¨ãã¾ãã
åä»ãé
åã®ãããã¡ã¼ãç´æ¥å¤æ´ããã«ããã®é·ãã夿´ããæ¹æ³ã¯ããã¾ããããã ããåä»ãé
åããµã¤ãºå¤æ´å¯è½ãªãããã¡ã¼ãé²è¦§ãã¦ãããåºå®ããã byteLength
ãæããªãå ´åãããã¯ãé·ã追跡ãã§ããã夿´å¯è½ãªãããã¡ã¼ããµã¤ãºå¤æ´ãããã¨ãèªåçã«ãããã¡ã¼ã«åãããã«ãµã¤ãºå¤æ´ããã¾ãã詳細ã¯ããµã¤ãºå¤æ´å¯è½ãªãããã¡ã¼ãé²è¦§ããéã®åä½ãåç
§ãã¦ãã ããã
é常ã®é åã¨åæ§ã«ããã©ã±ããè¨æ³ã使ç¨ãã¦åä»ãé åã®è¦ç´ ã«ã¢ã¯ã»ã¹ãããã¨ãã§ãã¾ãã 対å¿ãããããã¡ã¼å ã®ãã¤ããåå¾ãããæ°å¤ã¨ãã¦è§£éããã¾ãã æ°å¤ã使ç¨ãã¦ããããã£ã«ã¢ã¯ã»ã¹ããå ´åï¼ã¾ãã¯ãããããã£ã«ã¢ã¯ã»ã¹ããéã«ã¯æ°å¤ã¯å¸¸ã«æååã«å¤æããããããæ°å¤ã®æåå表ç¾ã使ç¨ããå ´åï¼ããã®ã¢ã¯ã»ã¹ã¯åä»ãé åã«ãã£ã¦ãããã·ã¼åããã¾ãã ã¤ã¾ãããªãã¸ã§ã¯ãèªä½ãæä½ãããã¨ã¯ããã¾ããã ããã¯ãä¾ãã°æ¬¡ã®ãããªãã¨ãæå³ãã¾ãã
undefined
ãè¿ããããªãã¸ã§ã¯ãä¸ã®ããããã£ã«å®éã«ã¢ã¯ã»ã¹ãããã¨ãªããè¿å¤ã«ããã¦ãã®ããããã£ãã¢ã¯ã»ã¹ããããã®ããã«è¦ãããããã¨ãã§ãã¾ããconst uint8 = new Uint8Array([1, 2, 3]);
console.log(uint8[0]); // 1
// ä¾ç¤ºã®ã¿ãç®çã¨ãã¦ãã¾ããæ¬çªã³ã¼ãã«ã¯ä½¿ç¨ããªãã§ãã ããã
uint8[-1] = 0;
uint8[2.5] = 0;
uint8[NaN] = 0;
console.log(Object.keys(uint8)); // ["0", "1", "2"]
console.log(uint8[NaN]); // undefined
// æ°å以å¤ã®æåã§ã¢ã¯ã»ã¹ãã¦ãåä½ãã
uint8[true] = 0;
console.log(uint8[true]); // 0
Object.freeze(uint8); // TypeError: Cannot freeze array buffer views with elements
DataView
DataView
ã¯ãä»»æã®ãã¼ã¿ããããã¡ã¼ã«èªã¿æ¸ãããããã®ã²ãã¿ã¼/ã»ãã¿ã¼ API ãæä¾ãããä½ã¬ãã«ã¤ã³ã¿ã¼ãã§ã¤ã¹ã§ããããã¯ãä¾ãã°ãã¾ãã¾ãªåã®ãã¼ã¿ãæ±ãå ´åã«å½¹ç«ã¡ã¾ããåä»ãé
åã®ãã¥ã¼ã¯ããã©ãããã©ã¼ã ã®ãã¤ãã£ãã®ãã¤ãé ï¼ã¨ã³ãã£ã¢ã³ãåç
§ï¼ã«ãªãã¾ããæ¢å®ã§ã¯ãããã°ã¨ã³ãã£ã¢ã³ï¼ãã¤ããæä¸ä½ãããããæä¸ä½ãããã®é ã«ä¸¦ã¶ï¼ã§ãã ã²ãã¿ã¼/ã»ãã¿ã¼ã¡ã½ããã使ç¨ãã¦ããã¤ããæä¸ä½ãããããæä¸ä½ãããã®é ï¼ãªãã«ã¨ã³ãã£ã¢ã³ï¼ã«ä¸¦ã¹æ¿ãããã¨ãã§ãã¾ãã
DataView
ã¯ã¢ã©ã¤ã³ã¡ã³ããå¿
è¦ã¨ãã¾ããããã«ããã¤ãã®èªã¿æ¸ãã¯ãä»»æã®ãªãã»ãããæå®ãã¦å§ãããã¨ãã§ãã¾ããã»ãã¿ã¼ã¡ã½ãããåæ§ã«åä½ãã¾ãã
次ã®ä¾ã§ã¯ã DataView
ã使ç¨ãã¦ä»»æã®æ°å¤ã®ãã¤ããªã¼è¡¨ç¾ãåå¾ãã¾ãã
function toBinary(
x,
{ type = "Float64", littleEndian = false, separator = " ", radix = 16 } = {},
) {
const bytesNeeded = globalThis[`${type}Array`].BYTES_PER_ELEMENT;
const dv = new DataView(new ArrayBuffer(bytesNeeded));
dv[`set${type}`](0, x, littleEndian);
const bytes = Array.from({ length: bytesNeeded }, (_, i) =>
dv
.getUint8(i)
.toString(radix)
.padStart(8 / Math.log2(radix), "0"),
);
return bytes.join(separator);
}
console.log(toBinary(1.1)); // 3f f1 99 99 99 99 99 9a
console.log(toBinary(1.1, { littleEndian: true })); // 9a 99 99 99 99 99 f1 3f
console.log(toBinary(20, { type: "Int8", radix: 2 })); // 00010100
åä»ãé
åã使ç¨ãã Web API
ãããã¯ãåä»ãé åãå©ç¨ãã API ã®ä¾ã§ããä»ã«ãããã¾ããã常ã«è¿½å ããã¦ãã¾ãã
FileReader.prototype.readAsArrayBuffer()
FileReader.prototype.readAsArrayBuffer()
ã¡ã½ããã¯ãæå®ãã Blob
ã¾ã㯠File
ã®å
容ã®èªã¿åããéå§ãã¾ãã
fetch()
fetch()
ã®ãªãã·ã§ã³ã§ãã body
ã«ã¯ãåä»ãé
åã¾ã㯠ArrayBuffer
ãå
¥åãããã¨ãã§ãããããã®ãªãã¸ã§ã¯ãã POST
ãªã¯ã¨ã¹ãã®å
容ã¨ãã¦éä¿¡ãããã¨ãã§ãã¾ãã
ImageData.data
Uint8ClampedArray
ã§ã0
ãã 255
ã¾ã§ã®æ´æ°å¤ã§ãRGBA é ã«ãã¼ã¿ãæ ¼ç´ãã䏿¬¡å
é
åã表ãã¾ãã
å§ãã«ãããã¡ã¼ã®ä½æãå¿ è¦ã§ãããããã§ã¯ 16 ãã¤ãåºå®é·ã¨ãã¾ãã
const buffer = new ArrayBuffer(16);
ããã§ãå ¨ä½ã 0 ã§åæåãããã¡ã¢ãªã¼é åãã§ãã¾ããããããããã®ãããã¡ã¼ã«å¯¾ãã¦ã§ãããã¨ã¯ãã¾ãããã¾ãããä¾ãã°ããããã¡ã¼ãæ£ãããµã¤ãºã§ãããã¨ã確èªã§ãã¾ãã
if (buffer.byteLength === 16) {
console.log("ã¯ãã 16 ãã¤ãã§ãã");
} else {
console.log("ãããªããµã¤ãºãéãã¾ãï¼");
}
ãã®ãããã¡ã¼ã§å®éã®ä½æ¥ãè¡ãåã«ããã¥ã¼ã使ããªããã°ãªãã¾ããããããã¡ã¼å ã®ãã¼ã¿ã 32 ããã符å·ä»ãæ´æ°å¤ã®é åã¨ãã¦æ±ããã¥ã¼ã使ãã¦ã¿ã¾ãããã
const int32View = new Int32Array(buffer);
ãã®æç¹ã§é åã®ãã£ã¼ã«ãã¸ãé常ã®é åã¨åãããã«ã¢ã¯ã»ã¹ãããã¨ãå¯è½ã«ãªãã¾ãã
for (let i = 0; i < int32View.length; i++) {
int32View[i] = i * 2;
}
ããã¯é
åãå¤ 0
, 2
, 4
, 6
ã® 4 ã¤ã®ã¨ã³ããªã¼ (4 ã¤ã®ã¨ã³ããªã¼ãå 4 ãã¤ãã§ãåè¨ 16 ãã¤ã) ã§åãã¾ãã
åä¸ã®ãã¼ã¿ã«å¯¾ãã¦è¤æ°ã®ãã¥ã¼ã使ã§ãããã¨ãèããã¨ããããã¯å®ã«è峿·±ããã®ã«ãªãã¾ããä¾ãã°ãååºã®ã³ã¼ãã®ç¶ãã以ä¸ã®ããã«ãã¾ãã
const int16View = new Int16Array(buffer);
for (let i = 0; i < int16View.length; i++) {
console.log(`Entry ${i}: ${int16View[i]}`);
}
ããã§ã¯ãåä¸ã®ãããã¡ã¼ãæ¢åã® 32 ãããå¤ã®ãã¥ã¼ã¨å
±æãã 16 ãããæ´æ°å¤ã®ãã¥ã¼ã使ãã¦ããããã¡ã¼å
ã®å¤ãã¹ã¦ã 16 ãããæ´æ°å¤ã¨ãã¦åºåãã¦ãã¾ããããã¨ã0
, 0
, 2
, 0
, 4
, 0
, 6
, 0
ã¨ããåºåãå¾ã¾ãã
Int16Array | 0 | 0 | 2 | 0 | 4 | 0 | 6 | 0 | Int32Array | 0 | 2 | 4 | 6 | ArrayBuffer | 00 00 00 00 | 02 00 00 00 | 04 00 00 00 | 06 00 00 00 |
ããã§ä¸æ©é²ã¿ã¾ãããã以ä¸ã®ã³ã¼ãã«ã¤ãã¦èãã¦ã¿ã¦ãã ããã
int16View[0] = 32;
console.log(`Entry 0 in the 32-bit array is now ${int32View[0]}`);
ãã®ã³ã¼ãã®åºå㯠"Entry 0 in the 32 ãããarray is now 32"
ã«ãªãã¾ãã
è¨ãæããã¨ã2 ã¤ã®é åã¯åããã¼ã¿ãããã¡ã¼ãç°ãªãå½¢å¼ã§åãæ±ãåç´ãªãã¥ã¼ã§ããã¨ãããã¨ã§ãã
Int16Array | 32 | 0 | 2 | 0 | 4 | 0 | 6 | 0 | Int32Array | 32 | 2 | 4 | 6 | ArrayBuffer | 20 00 00 00 | 02 00 00 00 | 04 00 00 00 | 06 00 00 00 |
ããã¯ãã©ã®ãã¥ã¼åã§ãå®è¡ã§ãã¾ãããæ´æ°ãè¨å®ãããããæµ®åå°æ°ç¹æ°ã¨ãã¦èªã¿åãã¨ãããããå¥å¦ãªçµæãåå¾ãããã¨ã«ãªãã¾ããããã¯ãããããç°ãªãæ¹æ³ã§è§£éãããããã§ãã
const float32View = new Float32Array(buffer);
console.log(float32View[0]); // 4.484155085839415e-44
ãããã¡ã¼ããããã¹ããèªã¿è¾¼ã
ãããã¡ã¼ã¯å¸¸ã«æ°å¤ã表ãã¨ã¯éãã¾ãããä¾ãã°ããã¡ã¤ã«ãèªã¿è¾¼ãã¨ããã¹ããã¼ã¿ãããã¡ã¼ããããã¾ãããã®ãã¼ã¿ããããã¡ã¼ããèªã¿åºãã«ã¯ãåä»ãé åã使ç¨ãããã¨ãã§ãã¾ãã
次ã®ä¾ã¯ã UTF-8 ã®ããã¹ããã TextDecoder
Web API ã使ç¨ãã¦èªã¿åãã¾ãã
const buffer = new ArrayBuffer(8);
const uint8 = new Uint8Array(buffer);
// ãã¼ã¿ã¯æåã§ããã«æ¸ãã¾ããããã§ã«ãããã¡ã¼ã«å
¥ã£ã¦ãããã®ã¨ãã¦å¦çãã¾ãã
uint8.set([228, 189, 160, 229, 165, 189]);
const text = new TextDecoder().decode(uint8);
console.log(text); // "ä½ å¥½"
次ã®ä¾ã¯ã UTF-16 ã®ããã¹ããã String.fromCharCode()
ã¡ã½ããã使ç¨ãã¦èªã¿åãã¾ãã
const buffer = new ArrayBuffer(8);
const uint16 = new Uint16Array(buffer);
// ãã¼ã¿ã¯æåã§ããã«æ¸ãã¾ããããã§ã«ãããã¡ã¼ã«å
¥ã£ã¦ãããã®ã¨ãã¦å¦çãã¾ãã
uint16.set([0x4f60, 0x597d]);
const text = String.fromCharCode(...uint16);
console.log(text); // "ä½ å¥½"
è¤åãã¼ã¿æ§é ãæ±ã
1 ã¤ã®ãããã¡ã¼ãããããã¡ã¼å ã«ããã¦ç°ãªããªãã»ããã§å§ã¾ããã¾ãã¿ã¤ããç°ãªãè¤æ°ã®ãã¥ã¼ã¨çµã³ã¤ãããã¨ã§ãè¤æ°ã®ç¨®é¡ã®ãã¼ã¿ãæã¤ãã¼ã¿ãªãã¸ã§ã¯ããåãæ±ããã¨ãå¯è½ã«ãªãã¾ããããã«ãããä¾ãã° WebGL ã®è¤åãã¼ã¿æ§é ããã¼ã¿ãã¡ã¤ã«ãåãæ±ããã¨ãå¯è½ã«ãªãã¾ãã
以ä¸ã® C æ§é ä½ã«ã¤ãã¦èãã¦ã¿ã¾ãããã
struct someStruct {
unsigned long id;
char username[16];
float amountDue;
};
ãã®ãããªå½¢å¼ã®ãã¼ã¿ãå«ããããã¡ã¼ã¯ã以ä¸ã®ããã«ã¢ã¯ã»ã¹ã§ãã¾ãã
const buffer = new ArrayBuffer(24);
// ... ãã¼ã¿ããããã¡ã¼ã«èªã¿åã ...
const idView = new Uint32Array(buffer, 0, 1);
const usernameView = new Uint8Array(buffer, 4, 16);
const amountDueView = new Float32Array(buffer, 20, 1);
ä¾ãã°ãåè¨éé¡ã«ã¯ amountDueView[0]
ã§ã¢ã¯ã»ã¹ã§ãã¾ãã
ã¡ã¢: C æ§é ä½ã«ããããã¼ã¿æ§é ã®ã¢ã©ã¤ã¡ã³ãã¯æ©ç¨®ä¾åã§ãããããã®ãã¼ã¿åãè¾¼ã¿ã®éãã«æ³¨æããã³é æ ®ãã¦ãã ããã
é常ã®é åã¸ã®å¤æåä»ãé
åãå¦çããå¾ã¯ã Array
ãããã¿ã¤ãã®å©ç¹ã享åããããé常ã®é
åã«å¤æãããã¨ããæç¨ãªå ´åãããã¾ããããã«ã¯ Array.from()
ã®ãããã¿ã¤ãã使ç¨ãã¦ãã ããã
const typedArray = new Uint8Array([1, 2, 3, 4]);
const normalArray = Array.from(typedArray);
åæ§ã«ã¹ãã¬ããæ§æã使ç¨ããã¨ãããªãã¾ãã
const typedArray = new Uint8Array([1, 2, 3, 4]);
const normalArray = [...typedArray];
é¢é£æ
å ±
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4