2013-09-27 2 views
2

Я хочу знать, что такое типизированные массивы в JavaScript (например, Int16Array, Uint32Array, Uint8ClampedArray и т. Д.). Я новичок в этой концепции уровня байтов, так как в действительности я не понимаю, что говорится. Например, если вы посмотрите на этой статье, когда он говорит о 32 битной манипуляции я потерял тогда ...
https://hacks.mozilla.org/2011/12/faster-canvas-pixel-manipulation-with-typed-arrays/Понимание концепции типизированных массивов в JavaScript

Я знаю, персонаж два байта в JavaScript, и я знаю типизированные массивы просто буфер (?), в котором хранится байт, тогда просмотр данных, такой как эти три выше, используется для чтения/изменения информации байта определенным образом в зависимости от их типа. Однако я не могу понять, как их использовать или какую выгоду они имеют над «нормальными» массивами. Может ли кто-нибудь объяснить случаи использования и преимущества типизированных массивов?

+1

Это uint32, как в Unsigned INTeger, не так ли? – ppeterka

+0

Это не часть JavaScript (пока) – Mohsen

+1

@Mohsen: не в самой спецификации ECMAScript, но некоторые браузеры предоставляют объекты хоста, которые действительно такие вещи - см. Https://developer.mozilla.org/en-US/docs/ Web/JavaScript/Typed_arrays для более подробной информации. –

ответ

2

Типизированные массивы обычно используются при взаимодействии с внешним миром, где данные поступают в определенную форму, отличную от javascript, и вы хотите получить доступ к этим данным через javascript. Массивы типов используются для создания определенного представления буфера данных. Буфер представляет собой необработанные данные, и представление представляет собой метод чтения/интерпретации/доступа к этим данным.

Если вы не взаимодействуете с внешним миром и не пытаетесь обрабатывать данные, созданные за пределами javascript или отправленные агенту за пределами javascript, тогда обычно можно использовать обычный массив javascript и не использовать буферы и типизированные массивы.

Это то, что типы вы спрашивали о являются:

Int16Array: An array of 16-bit integers (signed) - 2 bytes per entry 
Uint8Array: An array of 8-bit unsigned integers - 1 byte per entry 
Uint32Array: An array of 32-bit unsigned integers - 4 bytes per entry 

Вы можете увидеть список всех типизированных массивов здесь: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Typed_arrays

Когда переменная typed, что означает, что переменная имеет очень специфический тип и только тот тип. Тип может быть строкой, 16-разрядным знаковым целым числом, числом с плавающей запятой и т. Д. В javascript переменная может хранить любые данные, поэтому она не набирается специально. В других языках, таких как C, переменные обычно предопределены для хранения определенного типа и (без использования определенных переопределений), вы не можете назначать данные разных типов этой переменной.

Не намереваясь приступить к аргументации о желательности использования различных языковых функций, обычно считается более безопасным для программирования на типизированных языках, и данные, возможно, могут быть быстрее обработаны механизмом выполнения, но нетипизированные или слабо типизированные языки иногда могут быть более гибкий - сделать его проще или чище, чтобы что-то сделать.

+0

так что только преимущество в javascript для типизированных массивов - скорость, правильно? –

+2

Нет, это совсем не то, что я сказал. Пожалуйста, прочтите мой первый параграф. – jfriend00

+0

, то почему исходные данные не могли быть помещены в линейный массив. Как и в canvas imageData.data - это линейный массив, но imageData.data.buffer - типизированный массив –

Смежные вопросы