diff options
Diffstat (limited to 'files/fr/web/javascript/reference/objets_globaux/symbol/isconcatspreadable/index.html')
-rw-r--r-- | files/fr/web/javascript/reference/objets_globaux/symbol/isconcatspreadable/index.html | 110 |
1 files changed, 110 insertions, 0 deletions
diff --git a/files/fr/web/javascript/reference/objets_globaux/symbol/isconcatspreadable/index.html b/files/fr/web/javascript/reference/objets_globaux/symbol/isconcatspreadable/index.html new file mode 100644 index 0000000000..89046c2290 --- /dev/null +++ b/files/fr/web/javascript/reference/objets_globaux/symbol/isconcatspreadable/index.html @@ -0,0 +1,110 @@ +--- +title: Symbol.isConcatSpreadable +slug: Web/JavaScript/Reference/Objets_globaux/Symbol/isConcatSpreadable +tags: + - ECMAScript 2015 + - JavaScript + - Propriété + - Reference + - Symbol +translation_of: Web/JavaScript/Reference/Global_Objects/Symbol/isConcatSpreadable +--- +<div>{{JSRef}}</div> + +<p>Le symbole connu <strong><code>Symbol.isConcatSpreadable</code></strong> est utilisé pour configurer la façon dont un tableau est aplati lors d'une concaténation via la méthode {{jsxref("Array.prototype.concat()")}}.</p> + +<div>{{EmbedInteractiveExample("pages/js/symbol-isconcatspreadable.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="Description">Description</h2> + +<p>Le symbole <code>@@isConcatSpreadable</code> (<code>Symbol.isConcatSpreadable</code>) peut être défini comme une propriété propre ou héritée. C'est une valeur booléenne qui contrôle le comportement des tableaux et des objets semblables à des tableaux :</p> + +<ul> + <li>Pour les tableaux, <code>concat</code> aplatira les tableaux par défaut. <code>Symbol.isConcatSpreadable</code> peut être utilisé pour obtenir le comportement opposé.</li> + <li>Pour les objets semblables à des tableaux, par défaut, il n'y aucune mise à plat. <code>Symbol.isConcatSpreadable</code> permet de forcer cette mise à plat.</li> +</ul> + +<p>{{js_property_attributes(0,0,0)}}</p> + +<h2 id="Exemples">Exemples</h2> + +<h3 id="Tableaux_(Array)">Tableaux (<code>Array</code>)</h3> + +<p>Par défaut, {{jsxref("Array.prototype.concat()")}} aplatit les tableaux pour le résultat de la concaténation :</p> + +<pre class="brush: js">var alpha = ['a', 'b', 'c'], + numérique = [1, 2, 3]; + +var alphaNumérique = alpha.concat(numérique); + +console.log(alphaNumérique); +// Résultat : ['a', 'b', 'c', 1, 2, 3] +</pre> + +<p>En définissant <code>Symbol.isConcatSpreadable</code> avec <code>false</code>, on peut désactiver le comportement par défaut :</p> + +<pre class="brush: js">var alpha = ['a', 'b', 'c'], + numérique = [1, 2, 3]; + +numérique[Symbol.isConcatSpreadable] = false; +var alphaNumérique = alpha.concat(numérique); + +console.log(alphaNumérique); +// Résultat: ['a', 'b', 'c', [1, 2, 3] ] +</pre> + +<h3 id="Objets_semblables_à_des_tableaux">Objets semblables à des tableaux</h3> + +<p>Pour les objets semblables à un tableau, par défaut, il n'y a pas de fusion. Il faut donc que <code>Symbol.isConcatSpreadable</code> vaille <code>true</code> pour aplatir le tableau :</p> + +<pre class="brush: js">var x = [1, 2, 3]; + +var fauxTableau = { + [Symbol.isConcatSpreadable]: true, + length: 2, + 0: "coucou", + 1: "monde" +} + +x.concat(fauxTableau); // [1, 2, 3, "coucou", "monde"] +</pre> + +<div class="note"> +<p><strong>Note :</strong> La propriété <code>length</code> indique ici le nombre de propriétés à ajouter au tableau.</p> +</div> + +<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('ES2015', '#sec-symbol.isconcatspreadable', 'Symbol.isconcatspreadable')}}</td> + <td>{{Spec2('ES2015')}}</td> + <td>Définition initiale.</td> + </tr> + <tr> + <td>{{SpecName('ESDraft', '#sec-symbol.isconcatspreadable', 'Symbol.isconcatspreadable')}}</td> + <td>{{Spec2('ESDraft')}}</td> + <td>Aucune modification.</td> + </tr> + </tbody> +</table> + +<h2 id="Compatibilité_des_navigateurs">Compatibilité des navigateurs</h2> + +<div class="hidden">Ce tableau de compatibilité a été généré à partir de données structurées. Si vous souhaitez contribuer à ces données, n'hésitez pas à envoyer une <em>pull request</em> sur <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a>.</div> + +<p>{{Compat("javascript.builtins.Symbol.isConcatSpreadable")}}</p> + +<h2 id="Voir_aussi">Voir aussi</h2> + +<ul> + <li>{{jsxref("Array.prototype.concat()")}}</li> +</ul> |