La vue DataView fournit une interface de bas niveau pour lire et écrire des données de différents types numériques dans un ArrayBuffer, quel que soit le « boutisme » de la plate-forme.

Syntaxe

new DataView(buffer [, décalageOctets [, longueurOctets]])

Paramètres

buffer
Un ArrayBuffer ou SharedArrayBuffer existant à utiliser pour la mise en mémoire du nouvel objet DataView.
décalageOctets Facultatif
Le décalage, exprimé en octets, pour trouver le premier octet significatif du buffer à représenter dans la vue. Si ce paramètre n'est pas fourni, la vue commencera au premier octet du buffer.
longueurOctets Facultatif
Le nombre d'éléments dans le tableau d'octets. Si ce paramètre n'est pas fourni, la longueur de la vue correspondra à celle du buffer.

Valeur de retour

Un nouvel objet DataView représentant le tampon mémoire (buffer) fourni.

L'objet ainsi renvoyé peut être vu comme un interpréteur du tampon mémoire. Cet objet sait comment convertir des nombres afin de lire ou d'écrire des valeurs dans le tampon. C'est la vue qui s'occupe de la gestion des entiers, de la conversion des flottants, du boutisme utilisé et des autres détails de représentation binaire.

Erreurs renvoyées

RangeError
Renvoyée si les paramètres décalageOctets et longueurOctets dépassent la fin du buffer fourni.

Ainsi, si la taille du tampon mémoire est de 16 octets, que décalageOctetsvaut 8 et que longueurOctets vaut 10, cette exception est levée car la vue résultante dépassera de deux octets la longueur totale du tampon mémoire.

Description

Le boutisme (endianness)

En utilisant cet objet, vous pouvez détecter le type d'architecture qui exécute votre script, ce qui peut être utile dans certains cas. Voici un fragment de code pour permettre cette détection. Voir Endianness pour plus d'informations.

var littleEndian = (function() {
  var buffer = new ArrayBuffer(2);
  new DataView(buffer).setInt16(0, 256, true /*littleEndian donc */);
  // Int16Array utilise le boutisme de la plate-forme
  return new Int16Array(buffer)[0] === 256;
})();
console.log(littleEndian); // true ou false

Gestion des valeurs entières sur 64 bits

JavaScript manipule les nombres comme des valeurs sur 32 bits. Aussi, le moteur ne prend pas en charge la gestion des entiers sur 64 bits et on ne peut donc pas manipuler de telles valeurs avec DataView. Afin de contourner ce problème, on peut implémenter une méthode getUint64() afin d'otbenir une valeur avec une précision allant jusqu'à Number.MAX_SAFE_INTEGER, ce qui peut être suffisant dans certains cas.

if(!DataView.prototype.getUint64){
  DataView.prototype.getUint64 = function(byteOffset, littleEndian) {
    // on décompose la valeur 64 sur bits en deux nombres 32 bits
    const gauche = this.getUint32(byteOffset, littleEndian);
    const droite = this.getUint32(byteOffset + 4, littleEndian);

    // on combine les deux valeurs 32 bits
    const combinaison = littleEndian ? gauche + 2**32*droite : 2**32*gauche + droite;
    if(!Number.isSafeInteger(combinaison)){
      console.warn(combinaison, " dépasse MAX_SAFE_INTEGER : perte de précision !");
    }
    return combinaison;
  } 
}

Propriétés

DataView.length
La longueur du constructeur DataView qui vaut 3.
DataView.prototype
Permet d'ajouter des propriétés à tous les objets DataView.

Instances de DataView

Chacune des instances de DataView hérite de DataView.prototype.

Propriétés

DataView.prototype.constructor
Définit la fonction qui permet de créer le prototype d'un objet. La valeur initiale correspond au constructeur natif standard DataView.
DataView.prototype.buffer Lecture seule
L'ArrayBuffer référencé par cette vue. Cette propriété est fixée lors de la construction de l'objet et est donc en lecture seule.
DataView.prototype.byteLength Lecture seule
La longueur, exprimée en octets, de la vue à partir du début de son ArrayBuffer. Cette propriété est fixée lors de la construction de l'objet et est donc en lecture seule.
DataView.prototype.byteOffset Lecture seule
Le décalage, exprimé en octets, entre le début de la vue et du ArrayBuffer correspondant. Cette propriété est fixée lors de la construction de l'objet et est donc en lecture seule.

Méthodes

Lecture

DataView.prototype.getInt8()
Obtient un entier signé codé sur 8 bits à partir de l'octet de début (potentiellement décalé) de la vue.
DataView.prototype.getUint8()
Obtient un entier non-signé codé sur 8 bits à partir de l'octet de début de la vue (potentiellement décalé).
DataView.prototype.getInt16()
Obtient un entier signé codé sur 16 bits (short par analogie avec le type C) à partir de l'octet de début de la vue (potentiellement décalé).
DataView.prototype.getUint16()
Obtient un entier non-signé codé sur 16 bits (unsigned short par analogie avec le type C) à partir de l'octet de début de la vue (potentiellement décalé).
DataView.prototype.getInt32()
Obtient un entier signé codé sur 32 bits (long par analogie avec le type C) à partir de l'octet de début de la vue (potentiellement décalé).
DataView.prototype.getUint32()
Obtient un entier non-signé codé sur 32 bits (unsigned long par analogie avec le type C) à partir de l'octet de début de la vue (potentiellement décalé).
DataView.prototype.getFloat32()
Obtient un flottant codé sur 32 bits (float par analogie avec le type C) à partir de l'octet de début de la vue (potentiellement décalé).
DataView.prototype.getFloat64()
Obtient un flottant codé sur 64 bits (double par analogie avec le type C) à partir de l'octet de début de la vue (potentiellement décalé).

Écriture

DataView.prototype.setInt8()
Enregistre un entier signé codé sur 8 bits à partir de l'octet de début (potentiellement décalé) de la vue.
DataView.prototype.setUint8()
Enregistre un entier non-signé codé sur 8 bits à partir de l'octet de début de la vue (potentiellement décalé).
DataView.prototype.setInt16()
Enregistre un entier signé codé sur 16 bits (short par analogie avec le type C) à partir de l'octet de début de la vue (potentiellement décalé).
DataView.prototype.setUint16()
Enregistre un entier non-signé codé sur 16 bits (unsigned short par analogie avec le type C) à partir de l'octet de début de la vue (potentiellement décalé).
DataView.prototype.setInt32()
Enregistre un entier signé codé sur 32 bits (long par analogie avec le type C) à partir de l'octet de début de la vue (potentiellement décalé).
DataView.prototype.setUint32()
Enregistre un entier non-signé codé sur 32 bits (unsigned long par analogie avec le type C) à partir de l'octet de début de la vue (potentiellement décalé).
DataView.prototype.setFloat32()
Enregistre un flottant codé sur 32 bits (float par analogie avec le type C) à partir de l'octet de début de la vue (potentiellement décalé).
DataView.prototype.setFloat64()
Enregistre un flottant codé sur 64 bits (double par analogie avec le type C) à partir de l'octet de début de la vue (potentiellement décalé).

Exemples

var buffer = new ArrayBuffer(16);
var dv = new DataView(buffer, 0);

dv.setInt16(1, 42);
dv.getInt16(1); //42

Spécifications

Spécification État Commentaires
Typed Array Specification Obsolete Remplacée par ECMAScript 6
ECMAScript 2015 (6th Edition, ECMA-262)
La définition de 'DataView' dans cette spécification.
Standard Définition initiale au sein d'un standard ECMA.
ECMAScript Latest Draft (ECMA-262)
La définition de 'DataView' dans cette spécification.
Projet  

Compatibilité des navigateurs

Update compatibility data on GitHub
OrdinateurMobileServeur
ChromeEdgeFirefoxInternet ExplorerOperaSafariWebview AndroidChrome pour AndroidEdge MobileFirefox pour AndroidOpera pour AndroidSafari pour iOSSamsung InternetNode.js
Support simpleChrome Support complet 9Edge Support complet 12Firefox Support complet 15IE Support complet 10Opera Support complet 12.1Safari Support complet 5.1WebView Android Support complet 4Chrome Android Support complet OuiEdge Mobile Support complet OuiFirefox Android Support complet 15Opera Android Support complet 12Safari iOS Support complet 4.2Samsung Internet Android Support complet Ouinodejs Support complet Oui
DataView() without new throwsChrome Support complet OuiEdge Support complet OuiFirefox Support complet 40IE Aucun support NonOpera Support complet OuiSafari ? WebView Android ? Chrome Android ? Edge Mobile ? Firefox Android Support complet 40Opera Android ? Safari iOS ? Samsung Internet Android ? nodejs Support complet 0.12
SharedArrayBuffer accepted as bufferChrome Support complet 60Edge ? Firefox Support complet 55IE ? Opera ? Safari ? WebView Android ? Chrome Android ? Edge Mobile ? Firefox Android Support complet 55Opera Android ? Safari iOS ? Samsung Internet Android ? nodejs ?
bufferChrome Support complet 9Edge Support complet 12Firefox Support complet 15IE Support complet 10Opera Support complet 12.1Safari Support complet 5.1WebView Android Support complet 4Chrome Android Support complet OuiEdge Mobile Support complet OuiFirefox Android Support complet 15Opera Android Support complet 12Safari iOS Support complet 4.2Samsung Internet Android Support complet Ouinodejs Support complet Oui
byteLengthChrome Support complet 9Edge Support complet 12Firefox Support complet 15IE Support complet 10Opera Support complet 12.1Safari Support complet 5.1WebView Android Support complet 4Chrome Android Support complet OuiEdge Mobile Support complet OuiFirefox Android Support complet 15Opera Android Support complet 12Safari iOS Support complet 4.2Samsung Internet Android Support complet Ouinodejs Support complet Oui
byteOffsetChrome Support complet 9Edge Support complet 12Firefox Support complet 15IE Support complet 10Opera Support complet 12.1Safari Support complet 5.1WebView Android Support complet 4Chrome Android Support complet OuiEdge Mobile Support complet OuiFirefox Android Support complet 15Opera Android Support complet 12Safari iOS Support complet 4.2Samsung Internet Android Support complet Ouinodejs Support complet Oui
getFloat32Chrome Support complet 9Edge Support complet 12Firefox Support complet 15IE Support complet 10Opera Support complet 12.1Safari Support complet 5.1WebView Android Support complet 4Chrome Android Support complet OuiEdge Mobile Support complet OuiFirefox Android Support complet 15Opera Android Support complet 12Safari iOS Support complet 4.2Samsung Internet Android Support complet Ouinodejs Support complet Oui
getFloat64Chrome Support complet 9Edge Support complet 12Firefox Support complet 15IE Support complet 10Opera Support complet 12.1Safari Support complet 5.1WebView Android Support complet 4Chrome Android Support complet OuiEdge Mobile Support complet OuiFirefox Android Support complet 15Opera Android Support complet 12Safari iOS Support complet 4.2Samsung Internet Android Support complet Ouinodejs Support complet Oui
getInt16Chrome Support complet 9Edge Support complet 12Firefox Support complet 15IE Support complet 10Opera Support complet 12.1Safari Support complet 5.1WebView Android Support complet 4Chrome Android Support complet OuiEdge Mobile Support complet OuiFirefox Android Support complet 15Opera Android Support complet 12Safari iOS Support complet 4.2Samsung Internet Android Support complet Ouinodejs Support complet Oui
getInt32Chrome Support complet 9Edge Support complet 12Firefox Support complet 15IE Support complet 10Opera Support complet 12.1Safari Support complet 5.1WebView Android Support complet 4Chrome Android Support complet OuiEdge Mobile Support complet OuiFirefox Android Support complet 15Opera Android Support complet 12Safari iOS Support complet 4.2Samsung Internet Android Support complet Ouinodejs Support complet Oui
getInt8Chrome Support complet 9Edge Support complet 12Firefox Support complet 15IE Support complet 10Opera Support complet 12.1Safari Support complet 5.1WebView Android Support complet 4Chrome Android Support complet OuiEdge Mobile Support complet OuiFirefox Android Support complet 15Opera Android Support complet 12Safari iOS Support complet 4.2Samsung Internet Android Support complet Ouinodejs Support complet Oui
getUint16Chrome Support complet 9Edge Support complet 12Firefox Support complet 15IE Support complet 10Opera Support complet 12.1Safari Support complet 5.1WebView Android Support complet 4Chrome Android Support complet OuiEdge Mobile Support complet OuiFirefox Android Support complet 15Opera Android Support complet 12Safari iOS Support complet 4.2Samsung Internet Android Support complet Ouinodejs Support complet Oui
getUint32Chrome Support complet 9Edge Support complet 12Firefox Support complet 15IE Support complet 10Opera Support complet 12.1Safari Support complet 5.1WebView Android Support complet 4Chrome Android Support complet OuiEdge Mobile Support complet OuiFirefox Android Support complet 15Opera Android Support complet 12Safari iOS Support complet 4.2Samsung Internet Android Support complet Ouinodejs Support complet Oui
getUint8Chrome Support complet 9Edge Support complet 12Firefox Support complet 15IE Support complet 10Opera Support complet 12.1Safari Support complet 5.1WebView Android Support complet 4Chrome Android Support complet OuiEdge Mobile Support complet OuiFirefox Android Support complet 15Opera Android Support complet 12Safari iOS Support complet 4.2Samsung Internet Android Support complet Ouinodejs Support complet Oui
setFloat32Chrome Support complet 9Edge Support complet 12Firefox Support complet 15IE Support complet 10Opera Support complet 12.1Safari Support complet 5.1WebView Android Support complet 4Chrome Android Support complet OuiEdge Mobile Support complet OuiFirefox Android Support complet 15Opera Android Support complet 12Safari iOS Support complet 4.2Samsung Internet Android Support complet Ouinodejs Support complet Oui
setFloat64Chrome Support complet 9Edge Support complet 12Firefox Support complet 15IE Support complet 10Opera Support complet 12.1Safari Support complet 5.1WebView Android Support complet 4Chrome Android Support complet OuiEdge Mobile Support complet OuiFirefox Android Support complet 15Opera Android Support complet 12Safari iOS Support complet 4.2Samsung Internet Android Support complet Ouinodejs Support complet Oui
setInt16Chrome Support complet 9Edge Support complet 12Firefox Support complet 15IE Support complet 10Opera Support complet 12.1Safari Support complet 5.1WebView Android Support complet 4Chrome Android Support complet OuiEdge Mobile Support complet OuiFirefox Android Support complet 15Opera Android Support complet 12Safari iOS Support complet 4.2Samsung Internet Android Support complet Ouinodejs Support complet Oui
setInt32Chrome Support complet 9Edge Support complet 12Firefox Support complet 15IE Support complet 10Opera Support complet 12.1Safari Support complet 5.1WebView Android Support complet 4Chrome Android Support complet OuiEdge Mobile Support complet OuiFirefox Android Support complet 15Opera Android Support complet 12Safari iOS Support complet 4.2Samsung Internet Android Support complet Ouinodejs Support complet Oui
setInt8Chrome Support complet 9Edge Support complet 12Firefox Support complet 15IE Support complet 10Opera Support complet 12.1Safari Support complet 5.1WebView Android Support complet 4Chrome Android Support complet OuiEdge Mobile Support complet OuiFirefox Android Support complet 15Opera Android Support complet 12Safari iOS Support complet 4.2Samsung Internet Android Support complet Ouinodejs Support complet Oui
setUint16Chrome Support complet 9Edge Support complet 12Firefox Support complet 15IE Support complet 10Opera Support complet 12.1Safari Support complet 5.1WebView Android Support complet 4Chrome Android Support complet OuiEdge Mobile Support complet OuiFirefox Android Support complet 15Opera Android Support complet 12Safari iOS Support complet 4.2Samsung Internet Android Support complet Ouinodejs Support complet Oui
setUint32Chrome Support complet 9Edge Support complet 12Firefox Support complet 15IE Support complet 10Opera Support complet 12.1Safari Support complet 5.1WebView Android Support complet 4Chrome Android Support complet OuiEdge Mobile Support complet OuiFirefox Android Support complet 15Opera Android Support complet 12Safari iOS Support complet 4.2Samsung Internet Android Support complet Ouinodejs Support complet Oui
setUint8Chrome Support complet 9Edge Support complet 12Firefox Support complet 15IE Support complet 10Opera Support complet 12.1Safari Support complet 5.1WebView Android Support complet 4Chrome Android Support complet OuiEdge Mobile Support complet OuiFirefox Android Support complet 15Opera Android Support complet 12Safari iOS Support complet 4.2Samsung Internet Android Support complet Ouinodejs Support complet Oui
prototypeChrome Support complet 9Edge Support complet 12Firefox Support complet 15IE Support complet 10Opera Support complet 12.1Safari Support complet 5.1WebView Android Support complet 4Chrome Android Support complet OuiEdge Mobile Support complet OuiFirefox Android Support complet 15Opera Android Support complet 12Safari iOS Support complet 4.2Samsung Internet Android Support complet Ouinodejs Support complet Oui

Légende

Support complet  
Support complet
Aucun support  
Aucun support
Compatibilité inconnue  
Compatibilité inconnue

Notes de compatibilité

A partir de Firefox 40 (Firefox 40 / Thunderbird 40 / SeaMonkey 2.37), DataView doit êre construit avec l'opérateur new. Si on invoque DataView() sans utiliser new, cela lèvera une exception TypeError.

var dv = DataView(buffer, 0); 
// TypeError: calling a builtin DataView constructor without new is forbidden
var dv = new DataView(buffer, 0);

Voir aussi

  • jDataView : une bibliothèque JavaScrit qui ajoute des prothèses et des extensions à l'API DataView afin de pouvoir la manipuler au travers des différents navigateurs et de Node.js.
  • ArrayBuffer
  • SharedArrayBuffer

Étiquettes et contributeurs liés au document

Contributeurs à cette page : SphinxKnight
Dernière mise à jour par : SphinxKnight,