Я считаю, что каждый учащийся JavaScript будет понимать различные основные типы данных JS. Массивы являются комбинациями данных. Это очень простая и простая концепция. У него не так много контента, и его не сложно научиться хорошо. Но то, что важно в этой статье, это не тот массив, который мы обычно видим, а Arraybuffer.
Многие из вещей, которые я написал, намеренно суммируются, потому что они хотят выполнить определенные конкретные функции. Их можно рассматривать как записки, и то же самое верно для этой статьи! Я изучал знания, связанные с веб -аудио -API и голосовой коммуникацией некоторое время назад. Контент фокусируется на потоке аудио потока между различными аудиоконтектными узлами. Теперь мне нужно понять, в каком формате данных звук по потоку, поэтому исследование ArrayBuffer особенно важно.
Модель стека массива в памяти
Приобретение массива
Как генерировать массив в JavaScript:
Кода -копия выглядит следующим образом:
[element0, element1, ..., elementn]
Новый массив (element0, element1, ..., elementn)
Новый массив (ArrayLength)
Определите его напрямую или создайте массив через конструктор, конечно, вы также можете использовать другие средства:
Кода -копия выглядит следующим образом:
"массив" .split ("" ");
"массив" .match (/a | r/g);
Подождите, есть много способов. Но я боюсь, что многие люди не очень четко понимают, какую структуру находится внутри.
Модель стека
В массиве мы можем поместить много данных различных типов данных, таких как:
Кода -копия выглядит следующим образом:
var arr = [21, "li jing", new date (), function () {},, null];
Приведенный выше массив содержит числа, строки, объекты, функции, неопределенные и нулевые одновременно. Мы можем описать вышеуказанный интерфейс данных конкретным образом:
Кода -копия выглядит следующим образом:
Куча
+-------------------------------------------------------------------------------------------------------------------------------------------
| 21 | +---------------------------+
+ ----------+ | |
| "Ли Цзин" | | |
+ ----------+ | + ---------+ |
| [См.] | -----------> | Объект | |
+ ----------+ | + ---------+ |
| [см.] | ------------------>+ ---------+ |
+ ----------+ | | функция | |
| неопределенное | | + ---------+ |
+ ----------+ | |
| null | +-------------------------+
+ -----------+ создан Барретом Ли
Типы данных JavaScript делятся на два типа, один из них - тип значения, а другой - эталонный тип. Общие типы ссылок включают объект и массив. В модели хранения массива, если данные типа значения похожи на число и строку, данные будут непосредственно втянуты в стек, в то время как тип эталона будет только подтолкнут к индексу значения. Концепция языка C состоит в том, чтобы сохранить только указатель данных, и эти данные хранятся в определенном блоке кучи. Стек не независим, а стек также может храниться в стеке.
Хорошо, это все для объяснения массива. Давайте подробно поговорим о соответствующих знаниях об ArrayBuffer.
Arraybuffer
Что такое Интернет? Какая самая основная проблема, которую необходимо обсудить в Интернете? Я думаю, что есть два момента: один - это данные, а другой - передача данных. Что касается отображения данных, это сложно, и это должно быть что -то на верхнем уровне Интернета. ArrayBuffer, который будет обсуждаться в этой статье, является самым основным типом данных, и его даже нельзя назвать типом данных. Это легко читать и писать другими способами.
Определение официальных пунктов:
ArrayBuffer-это тип данных, который используется для представления общего двоичного буфера данных с фиксированной длиной. Вы не можете напрямую манипулировать содержимым арадиционного оборудования; Вместо этого вы создаете объект ArrayBufferview, который представляет буфер в определенном формате, и используете его для чтения и написания содержимого буфера.
Оригинальный буфер, представляющий двоичные данные, который используется для хранения данных различных типов массивов. ArrayBuffer не может быть прочитана или записана напрямую, но его можно передать в типированный массив или объект DataView по мере необходимости для интерпретации исходного буфера.
Это необработанный буфер бинарных данных. Хотя JavaScript является языком слабого типа, он сам имеет ограничения на тип и размер данных. Нам нужно прочитать содержание буфера упорядоченным образом (запишите его) через определенную структуру данных.
Создание оригинального буфера
Конструктор ArrayBuffer может создать сырой буфер:
Кода -копия выглядит следующим образом:
var buffer = new Arraybuffer (30);
Из хромированной консоли вы можете увидеть:
Экземпляр буфера имеет атрибут Bytelength, который используется для получения размера буфера, метода среза, который поддерживается только IE11+ и IOS6+, который используется для перехвата длины буфера.
Кода -копия выглядит следующим образом:
Срез ArrayBuffer (
Неподписал долгое начало
Непосгированный длинный конец необязательно
);
Вы можете проверить эту демонстрацию:
Кода -копия выглядит следующим образом:
var buffer = new Arraybuffer (12);
var x = new Int32Array (буфер);
x [1] = 1234;
var slice = buffer.slice (4);
var y = new Int32Array (Slice);
console.log (x [1]);
console.log (y [0]);
x [1] = 6789;
console.log (x [1]);
console.log (y [0]);
Массивы на основе данных
Типы типов массива представляют различные представления об индексационных и манипулируемых объектах ArrayBuffer. Все типы массивов имеют фиксированную длину.
Кода -копия выглядит следующим образом:
Размер имени (в байтах) Описание
INT8Array 1 8-Bit Two комплемент подписанный целое число
Uint8Array 1 8-битный без знака целого числа
INT16Array 2 16-битный два комплемента подписано целое число
Uint16array 2 16-битный беспигнутый целое число
INT32Array 4 32-разрядного дважды дополняет целое число
Uint32Array 4 32-битный unsigned integer
Float32Array 4 32-битный IEEE номер плавающей запятой
Float64Array 8 64-битный IEEE Номер плавающей запятой
INT - это целое число, UINT - это беззнатный пластик, а Float - это тип плавания. Это основные концепции на языке C, поэтому я не буду их подробно объяснить. Поскольку эти просматриваемые структуры похожи, эта статья только объясняет тип Float32Array, и читатели могут извлечь из нее один за другим.
Float32Array очень похож на массив, за исключением того, что каждый элемент представляет собой 32-разрядную (4-байтовую) данные плавающей запятой. Float32Array После создания его размер не может быть изменен.
Мы можем создать Float32Array напрямую:
Кода -копия выглядит следующим образом:
var x = new float32array (2);
x [0] = 17;
console.log (x [0]); // 17
console.log (x [1]); // 0
console.log (x.length); // 2
Должна быть концепция, что это все еще массив, но каждый элемент в массиве представляет собой 32-разрядный тип данных с плавающей запятой:
Кода -копия выглядит следующим образом:
var x = new Float32Array ([17, -45.3]);
console.log (x [0]); // 17
console.log (x [1]); // -45.29999923706055
console.log (x.length); // 2
Мы присваиваем значение массива непосредственно X, объекту Float32Array, а затем он будет преобразован в 32-разрядное число плавающей запятой перед хранением.
Поскольку каждый элемент этого классового массива имеет один и тот же тип, в модели стека все они будут втянуты в стек. Следовательно, массив данных является типом значения, и это не ссылочный тип! Это следует обратить внимание и также может быть отражено в следующих примерах:
Кода -копия выглядит следующим образом:
var x = new Float32Array ([17, -45.3]);
var y = new float32array (x);
console.log (x [0]); // 17
console.log (x [1]); //-45.29999923706055
console.log (x.length); // 2
x [0] = -2;
console.log (y [0]); // 17, значение y не изменилось
Скопируйте значение x до y, измените x [0], y [0], и нет никаких изменений.
В дополнение к вышеуказанному методу, мы также можем создать массив данных другим способом:
Кода -копия выглядит следующим образом:
var buffer = new Arraybuffer (12);
var x = new Float32Array (буфер, 0, 2);
var y = new Float32Array (буфер, 4, 1);
x [1] = 7;
console.log (y [0]); // 7
Объясните, почему 7 возвращается здесь.
Кода -копия выглядит следующим образом:
Arraybuffer (12)
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | | | | | |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
/ /
x (float32array)
смещение: 0
Bytelength: 4
Длина: 2
Arraybuffer (12)
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | | | | | |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
/ /
у
Создан Барретом Ли
У вас все еще есть вопросы после прочтения приведенной выше иллюстрации? Я не думаю, что мне нужно продолжать объяснять. Единица ArrayBuffer может рассматриваться как 1, в то время как единица Float32Array составляет 4.
Объект DataView
Объект DataView работает более тщательно, но я не думаю, что это интересно. Различные массивы на основе данных, упомянутые выше, могут в основном удовлетворить приложение, поэтому я просто упомяну об этом здесь, простой пример:
Кода -копия выглядит следующим образом:
var buffer = new Arraybuffer (12);
var x = new DataView (Buffer, 0);
x.setint8 (0, 22);
x.setfloat32 (1, math.pi);
console.log (x.getint8 (0)); // 22
console.log (x.getfloat32 (1)); // 3.1415927410125732
Если вы заинтересованы, вы можете перейти на http://www.javascripture.com/dataview для получения подробной информации.
ArrayBuffer в XHR2
ArrayBuffer особенно широко используется. Будь то WebSocket, WebAudio, Ajax и т. Д., До тех пор, пока большие данные переднего процесса или хотят повысить производительность обработки данных, ArrayBuffer должен быть незаменимым.
XHR2 не новый. Возможно, вы использовали соответствующие функции, но вы не знаете, что это то, что такое XHR2. Наиболее важным является xhr.responsetype, который используется для установки формата данных ответа. Дополнительные параметры: «Текст», «Arraybuffer», «Blob» или «документ». Обратите внимание, что настройка (или игнорирование) xhr.responsetype = '' 'по умолчанию установит ответ на «текст». Есть соответствующие отношения, подобные этим:
Кода -копия выглядит следующим образом:
Запросить ответ
Текст домист
ArrayBuffer ArrayBuffer
Blob Blob
документ документ
Возьмите каштан:
Кода -копия выглядит следующим образом:
var xhr = new xmlhttprequest ();
xhr.open ('get', '/path/to/image.png', true);
xhr.responsetype = 'arraybuffer';
xhr.onload = function (e) {
// this.response == uint8array.buffer
var uint8array = new Uint8Array (this.Response);
};
xhr.send ();
Мы установили свойство в ArrayBuffer в XHR.ResponseType, поэтому мы можем использовать массив на основе данных для принятия данных, которые мы получаем!
краткое содержание
В этой статье в основном представлены, как массив хранится в модели стека, а также подробно описывает тип двоичного типа данных ArrayBuffer, оригинального буфера. В веб -разработке, данных и хранения данных являются важной частью, я надеюсь привлечь внимание!
В повествовании этой статьи могут быть ошибки, пожалуйста, поправьте их больше!