Esta página foi traduzida do inglês pela comunidade.Saiba mais e junte-se à comunidade MDN Web Docs.
DataView
Baseline Widely available *
This feature is well established and works across many devices and browser versions. It’s been available across browsers since julho de 2015.
* Some parts of this feature may have varying levels of support.
ODataView provê uma interface de baixo nível para leitura e escrita de múltiplos tipos de número em umArrayBuffer, independentemente daextremidade (endianness) da plataforma.
In this article
Experimente
// Create an ArrayBuffer with a size in bytesconst buffer = new ArrayBuffer(16);// Create a couple of viewsconst view1 = new DataView(buffer);const view2 = new DataView(buffer, 12, 4); // From byte 12 for the next 4 bytesview1.setInt8(12, 42); // Put 42 in slot 12console.log(view2.getInt8(0));// Expected output: 42Sintaxe
new DataView(buffer [, byteOffset [, byteLength]])
Parâmetros
bufferArrayBufferouSharedArrayBufferExperimental existente para usar como armazenamento de um novo objetoDataView.byteOffsetOptionalA mudança, em bytes, do primeiro byte determinado em um buffer, que será referenciado pela nova view. Se não for especificado, a view do buffer começará no primeiro byte.
byteLengthOptionalO número de elementos no array de bytes. Se não especificado, o tamanho da view será do mesmo tamanho do buffer.
Retorno
Um novo objetoDataView que representa o buffer de dados especificado. (Provavelmente não foi uma descrição muito útil.)
Você pode pensar nesse objeto retornado como um "intérprete" de um array buffer de bytes - ele sabe como converter números para inserir em um buffer corretamente, tanto ao ler quanto ao gravar. Isso significa lidar com conversõesinteger,float,endianness e outros detalhes da representação de números em formato binário.
Exceções
RangeErrorLançado se o
byteOffsetoubyteLengthespecificados ultrapassarem o final do buffer.Por exemplo, se o buffer tem 16 bytes de comprimento, o
byteOffseté 8 e obyteLengthé 10, esse erro será lançado porque a view resultante tenta estender 2 bytes acima do comprimento total do buffer.
Descrição
>Endianness
Formatos de númerosMulti-byte são representados de maneira diferente na memória, dependendo da arquitetura da máquina, vejaEndianness para mais informações. Assessores deDataView fornecem controle explícito de como o dado será acessado, independente doendianness da arquitetura em execução.
var littleEndian = (function () { var buffer = new ArrayBuffer(2); new DataView(buffer).setInt16(0, 256, true /* littleEndian */); // Int16Array uses the platform's endianness. return new Int16Array(buffer)[0] === 256;})();console.log(littleEndian); // true or falseValores inteiros de 64 bits
Como JavaScript atualmente não inclui suporte padrão para valores inteiros de 64 bits,DataView não oferece operações nativas de 64 bits. Como solução alternativa, você poderia implementar sua própria função getUint64() para obter um valor com a precisão deNumber.MAX_SAFE_INTEGER, o que pode ser bom para determinados casos.
function getUint64(dataview, byteOffset, littleEndian) { // split 64-bit number into two 32-bit (4-byte) parts const left = dataview.getUint32(byteOffset, littleEndian); const right = dataview.getUint32(byteOffset + 4, littleEndian); // combine the two 32-bit values const combined = littleEndian ? left + 2 ** 32 * right : 2 ** 32 * left + right; if (!Number.isSafeInteger(combined)) console.warn(combined, "exceeds MAX_SAFE_INTEGER. Precision may be lost"); return combined;}Como alternativa, se você precisar de um intervalo completo de 64 bits, poderá criar umBigInt.
function getUint64BigInt(dataview, byteOffset, littleEndian) { // split 64-bit number into two 32-bit (4-byte) parts const left = dataview.getUint32(byteOffset, littleEndian); const right = dataview.getUint32(byteOffset + 4, littleEndian); // combine the two 32-bit values as their hex string representations const combined = littleEndian ? right.toString(16) + left.toString(16).padStart(8, "0") : left.toString(16) + right.toString(16).padStart(8, "0"); return BigInt(`0x${combined}`);}Propriedades
Todas as instâncias deDataView herdamDataView.prototype e permitem a adição de propriedades a todos os objetos DataView.
Métodos
Exemplo
var buffer = new ArrayBuffer(16);var dv = new DataView(buffer, 0);dv.setInt16(1, 42);dv.getInt16(1); //42Especificações
| Specification |
|---|
| ECMAScript® 2026 Language Specification> # sec-dataview-objects> |
Compatibilidade com navegadores
Notas de compatibilidade
Começando com o Firefox 40,DataView deve ser construído com o operadornew . ChamandoDataView() como uma função sem onew, irá lançar umTypeError de agora em diante.
var dv = DataView(buffer, 0);// TypeError: calling a builtin DataView constructor without new is forbiddenvar dv = new DataView(buffer, 0);Veja também
- jDataView: Biblioteca javascript que faz o polyfill e extende a API do
DataViewpara todos os browsers e para o Node.js. ArrayBufferSharedArrayBuffer