JavaScript. Подробное руководство, 6-е издание, стр. 387
<b>var pattern = new Uint8Array([0,1,2,3]); // Массив из 4 байтов</b><b>bytes.set(pattern); // Скопировать их в начало другого массива байтов</b><b>bytes.set(pattern, 4); // Скопировать их же в другое место массива</b><b>bytes.set([0,1,2,3], 8); // Просто скопировать значения из обычного массива</b>Типизированные массивы имеют также метод
<b>subarray(),</b><b>var ints = new Int16Array([0,1.2,3.4,5,6,7,8,9]); // 10 коротких целых</b><b>var last3 = ints.subarray(ints.length-3, ints.length); // Последние 3 из них</b><b>last3[0] // => 7: то же самое, что и ints[7]</b>Обратите внимание, что метод
<b>subarray()</b><b>ints[9] = -1; // Изменить значение в оригинальном массиве и...</b><b>last3[2] // => -1: изменения коснулись фрагмента массива</b>Тот факт, что метод
<b>subarray()</b><b>ArrayBuffег</b><b>last3.buffer // => вернет объект ArrayBuffer</b><b>last3.buffer == ints.buffer // => true: оба - представления одного буфера</b><b>last3.byteOffset // => 14: это представление начинается с 14-го байта в буфере </b><b>last3.byteLength // => 6: размер представления 6 байт (3 16-битных целых)</b>Сам объект
<b>ArrayBuffer</b><b>last3.byteLength // => 6: размер представления 6 байт</b><b>last3.buffer.byteLength // => 20: но буфер имеет размер 20 байт</b>Типизированные массивы являются важной частью прикладного интерфейса создания трехмерной графики WebGL в элементе <canvas>, и в броузерах они реализованы как часть прикладного интерфейса WebGL. WebGL не рассматривается в этой книге, но типизированные массивы весьма полезны сами по себе, и поэтому обсуждаются здесь. В главе 21 говорилось, что прикладной интерфейс объекта Canvas определяет метод getlmageData(), возвращающий объект ImageData. Свойство data объекта ImageData является массивом байтов. В спецификации HTML он называется CanvasPixelArray, но, по сути, это то же самое, что описываемый здесь Uint8Array, за исключением способа обработки значений, выходящих за диапазон 0-255.
Имейте в виду, что эти типы не являются частью базового языка. Будущие версии языка JavaScript, возможно, будут включать поддержку типизированных массивов, подобных этим, но на момент написания этих строк еще было неясно, примет ли язык прикладной интерфейс, описываемый здесь, или будет создан новый прикладной интерфейс.
Объект
<b>АгrayВuffers</b><b>ArrayBuffer</b><b>ArrayBuffer</b><b>var bytes = new Uint8Array(8); // Разместить 8 байтов</b><b>bytes[0] =1; // Записать в первый байт значение 1</b><b>bytes.buffer[0] // => undefined: буфер не имеет индекса 0</b><b>bytes.buffer[1] = 255; // Попробовать некорректно записать значение в байт буфера</b><b>bytes.buffer[1] // => 255: это обычное JavaScript-свойство</b><b>bytes[1] // => 0: строка выше не изменила байт</b>Имеется возможность создавать объекты
<b>ArrayBuffer</b><b>ArrayBuffer(),</b><b>ArrayBuffer</b><b>var buf = new ArrayBuffeг(1024*1024); // Один Мбайт</b><b>var asbytes = new Uint8Array(buf); // Представление в виде байтов</b><b>var asints = new Int32Array(buf); // В виде 32-битных целых со знаком</b><b>var lastK = new Uint8Array(buf,1023*1024); // Последний Кбайт в виде байтов</b><b>var ints2 = new Int32Array(buf, 1024, 256); // 2-й Кбайт в виде 256 целых чисел</b>Типизированные массивы позволяют представлять одну и ту же последовательность байтов в виде целых чисел размером 8, 16, 32 или 64 бита. Это поднимает проблему «порядка следования байтов», т. е. порядка, в каком следуют байты при объединении в более длинные слова. Для эффективности типизированные массивы используют порядок следования байтов, определяемый аппаратным обеспечением. В системах с обратным порядком следования байтов байты числа располагаются в буфере
<b>ArrayBuffer</b>