1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
|
---
title: ArrayBuffer
slug: Web/JavaScript/Reference/Global_Objects/ArrayBuffer
tags:
- ArrayBuffer
- Constructor
- JavaScript
- Reference
- TypedArrays
translation_of: Web/JavaScript/Reference/Global_Objects/ArrayBuffer
original_slug: Web/JavaScript/Reference/Objets_globaux/ArrayBuffer
---
<div>{{JSRef}}</div>
<p>L'objet <strong><code>ArrayBuffer</code></strong> est utilisé afin de représenter un tampon (<em>buffer</em>) de données binaires de longueur fixe de façon générique. C'est un tableau d'octets. La manipulation du contenu d'un <code>ArrayBuffer</code> se fait de façon indirecte en créant un <a href="/fr/docs/Web/JavaScript/Reference/Objets_globaux/TypedArray">tableau typé</a> ou un objet {{jsxref("DataView")}} qui permet de représenter le tampon dans un format donné qui permet de lire/écrire des contenus dans le tampon de mémoire.</p>
<div>{{EmbedInteractiveExample("pages/js/arraybuffer-constructor.html")}}</div>
<p class="hidden">Le code source de cet exemple interactif est disponible dans un dépôt GitHub. Si vous souhaitez contribuez à ces exemples, n'hésitez pas à cloner <a href="https://github.com/mdn/interactive-examples">https://github.com/mdn/interactive-examples</a> et à envoyer une <em>pull request</em> !</p>
<h2 id="Syntaxe">Syntaxe</h2>
<pre class="syntaxbox">new ArrayBuffer(longueur)
</pre>
<h3 id="Paramètres">Paramètres</h3>
<dl>
<dt><code>longueur</code></dt>
<dd>La taille, exprimée en octets, du tableau représentant le tampon.</dd>
</dl>
<h3 id="Valeur_de_retour">Valeur de retour</h3>
<p>Un nouvel objet <code>ArrayBuffer</code> de la taille donnée. Ses éléments sont initialisés à 0.</p>
<h3 id="Exceptions">Exceptions</h3>
<p>Une exception {{jsxref("RangeError")}} est levée lorsque l'argument <code>longueur</code> est supérieur à {{jsxref("Number.MAX_SAFE_INTEGER")}} (soit 2<sup>53</sup>) ou s'il est négatif.</p>
<h2 id="Description">Description</h2>
<p>Le constructeur <code>ArrayBuffer</code> crée une nouvelle instance d'<code>ArrayBuffer</code> dont la longueur est celle donnée lors de la construction.</p>
<h3 id="Obtenir_un_tampon_mémoire_depuis_des_données_existantes">Obtenir un tampon mémoire depuis des données existantes</h3>
<ul>
<li><a href="/fr/docs/Décoder_encoder_en_base64#Annexe_.3A_D.C3.A9coder_une_cha.C3.AEne_en_base64_en_un_objet_Uint8Array_ou_ArrayBuffer">À partir d'une chaîne de caractères en Base 64</a></li>
<li><a href="/fr/docs/Web/API/FileReader">À partir d'un fichier local</a></li>
</ul>
<h2 id="Propriétés">Propriétés</h2>
<dl>
<dt><code>ArrayBuffer.length</code></dt>
<dd>La longueur du constructeur <code>ArrayBuffer</code>. Elle vaut 1.</dd>
<dt>{{jsxref("ArrayBuffer.@@species", "get ArrayBuffer[@@species]")}}</dt>
<dd>La fonction de construction utilisée pour créer les objets dérivés.</dd>
<dt>{{jsxref("ArrayBuffer.prototype")}}</dt>
<dd>Cette propriété permet d'ajouter des propriétés à tous les objets <code>ArrayBuffer</code>.</dd>
</dl>
<h2 id="Méthodes">Méthodes</h2>
<dl>
<dt>{{jsxref("ArrayBuffer.isView", "ArrayBuffer.isView(arg)")}}</dt>
<dd>Cette méthode renvoie <code>true</code> si <code>arg</code> est une des vues sur l'<code>ArrayBuffer</code> telle qu'un <a href="/fr/docs/Web/JavaScript/Reference/Objets_globaux/TypedArray">tableau typé</a> ou un objet {{jsxref("DataView")}}, sinon elle renvoie <code>false</code>.</dd>
<dt>{{jsxref("ArrayBuffer.transfer", "ArrayBuffer.transfer(ancienTampon [, nouvelleLongueur])")}} {{experimental_inline}}</dt>
<dd>
<div class="line" id="file-arraybuffer-transfer-LC6">Cette méthode renvoie un nouvel objet <code>ArrayBuffer</code> dont le contenu est transféré depuis les données de <code>ancienTampon</code> et qui est ensuite tronqué ou rallongé avec des zéros pour que la taille du nouveau tampon soit <code>nouvelleLongueur</code>.</div>
</dd>
</dl>
<h2 id="Les_instances_d'ArrayBuffer">Les instances d'<code>ArrayBuffer</code></h2>
<p>Toutes les instances d'<code>ArrayBuffer</code> héritent de {{jsxref("ArrayBuffer.prototype")}}.</p>
<h3 id="Propriétés_2">Propriétés</h3>
<p>{{page('fr/docs/Web/JavaScript/Reference/Objets_globaux/ArrayBuffer/prototype','Propri.C3.A9t.C3.A9s')}}</p>
<h3 id="Méthodes_2">Méthodes</h3>
<p>{{page('fr/docs/Web/JavaScript/Reference/Objets_globaux/ArrayBuffer/prototype','M.C3.A9thodes')}}</p>
<dl>
<dt>{{jsxref("ArrayBuffer.slice()")}} {{non-standard_inline}}</dt>
<dd>Cette méthode fournit la même fonctionnalité que {{jsxref("ArrayBuffer.prototype.slice()")}}.</dd>
</dl>
<h2 id="Exemple">Exemple</h2>
<p>Dans cet exemple, on crée un tampon sur 8 octets avec une vue {{jsxref("Int32Array")}} qui fait référence à ce tampon :</p>
<pre class="brush: js">var tampon = new ArrayBuffer(8);
var vue = new Int32Array(tampon);</pre>
<h2 id="Spécifications">Spécifications</h2>
<table class="standard-table">
<tbody>
<tr>
<th scope="col">Spécification</th>
<th scope="col">État</th>
<th scope="col">Commentaires</th>
</tr>
<tr>
<td>{{SpecName('Typed Array')}}</td>
<td>{{Spec2('Typed Array')}}</td>
<td>Remplacée par ECMAScript 6.</td>
</tr>
<tr>
<td>{{SpecName('ES6', '#sec-arraybuffer-constructor', 'ArrayBuffer')}}</td>
<td>{{Spec2('ES6')}}</td>
<td>Définition initiale au sein d'un standard ECMA. <code>new</code> est obligaoire pour utiliser le constructeur.</td>
</tr>
<tr>
<td>{{SpecName('ESDraft', '#sec-arraybuffer-constructor', 'ArrayBuffer')}}</td>
<td>{{Spec2('ESDraft')}}</td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="Compatibilité_des_navigateurs">Compatibilité des navigateurs</h2>
<p>{{Compat("javascript.builtins.ArrayBuffer")}}</p>
<h2 id="Notes_de_compatibilité">Notes de compatibilité</h2>
<p>À partir d'ECMAScript 2015 (ES6),<code> ArrayBuffer</code> doit être utilisée avec {{jsxref("Opérateurs/L_opérateur_new", "new")}}. Appeler un constructeur <code>ArrayBuffer</code> comme une fonction, sans <code>new</code>, provoquera une exception {{jsxref("TypeError")}}.</p>
<pre class="brush: js example-bad">var dv = ArrayBuffer(10);
// TypeError: calling a builtin ArrayBuffer constructor
// without new is forbidden</pre>
<pre class="brush: js example-good">var dv = new ArrayBuffer(10);</pre>
<h2 id="Voir_aussi">Voir aussi</h2>
<ul>
<li><a href="/fr/docs/Web/JavaScript/Tableaux_typés">Les tableaux typés JavaScript</a></li>
<li>{{jsxref("SharedArrayBuffer")}}</li>
</ul>
|