--- title: Set slug: Web/JavaScript/Referencia/Objectes_globals/Set translation_of: Web/JavaScript/Reference/Global_Objects/Set ---
L'objecte Set permet emmagatzemar valors únics de qualsevol tipus, ja siguin {{Glossary("Primitive", "valors primitius")}} o bé referències a objectes.
new Set([iterable]);
Els objectes Set són coleccions de valors, els seus elements poden ser iterats en ordre d'inserció. Un valor només pot aparèixer un cop dins el Set; és únic dins la col·lecció del Set.
Degut a que cada valor dins el Set ha de ser únic, la igualtat dels valors serà comprovada i aquesta no es basa en el mateix algoritme que l'emprat per l'operador ===. Concreatement, per a Sets, +0 (que és estrictament igual a -0) i -0 són valors diferents. Tot i així, aquest comportament s'ha canviat a la última especificació de l'ECMAScript 6. A partir de Gecko 29.0 {{geckoRelease("29")}} ({{bug("952870")}}) i una recent versió nightly del Chrome, +0 i -0 són tractats com al mateix valor en objectes Set. Així mateix, NaN i undefined també poden ser emmagatzemats dins un Set. NaN és considerat igual a NaN (tot i que NaN !== NaN).
Set.lengthlength és 0.Set. Permet afegir propietats a tots els objectes Set.SetTotes les instàncies de Set hereten de {{jsxref("Set.prototype")}}.
{{page('ca/Web/JavaScript/Reference/Global_Objects/Set/prototype','Propietats')}}
{{page('ca/Web/JavaScript/Reference/Global_Objects/Set/prototype','Mètodes')}}
Setvar mySet = new Set();
mySet.add(1);
mySet.add(5);
mySet.add("algun text");
mySet.has(1); // true
mySet.has(3); // false, 3 no ha estat afegit al set
mySet.has(5); // true
mySet.has(Math.sqrt(25)); // true
mySet.has("Some Text".toLowerCase()); // true
mySet.size; // 3
mySet.delete(5); // esborra 5 del set
mySet.has(5); // false, 5 ha sigut esborrat
mySet.size; // 2, acabem d'esborrar un valor
// iterar els elements d'un set
// imprimeix els elements en l'ordre: 1, "algun text"
for (let item of mySet) console.log(item);
// imprimeix els elements en l'ordre: 1, "algun text"
for (let item of mySet.keys()) console.log(item);
// imprimeix els elements en l'ordre: 1, "algun text"
for (let item of mySet.values()) console.log(item);
// imprimeix els elements en l'ordre: 1, "algun text"
//(key i value són iguals en aquest exemple)
for (let [key, value] of mySet.entries()) console.log(key);
// converteix el set en un Array (mitjançant Array comprehensions)
var myArr = [v for (v of mySet)]; // [1, "algun text"]
// Alternativa (mitjançant Array.from)
var myArr = Array.from(mySet); // [1, "algun text"]
// el codi següent també funcionarà si s'executa dins un document HTML
mySet.add(document.body);
mySet.has(document.querySelector("body")); // true
// conversió entre Set i Array
mySet2 = new Set([1,2,3,4]);
mySet2.size; // 4
[...mySet2]; // [1,2,3,4]
// la intersecció es pot simular via
var intersection = new Set([x for (x of set1) if (set2.has(x))]);
// Iteració de les entrades del set mitjançant un forEach
mySet.forEach(function(value) {
console.log(value);
});
// 1
// 2
// 3
// 4
Arrayvar myArray = ["valor1", "valor2", "valor3"];
// Utilitzem el constructor normal del Set per a transformar un Array en un Set
var mySet = new Set(myArray);
mySet.has("valor1"); // retorna true
// Utilitzem l'operador spread per a transformar un Set en un Array.
console.log(uneval([...mySet])); // Mostrarà exactament el mateix Array que myArray
| Especificació | Estat | Comentaris |
|---|---|---|
| {{SpecName('ES6', '#sec-set-objects', 'Set')}} | {{Spec2('ES6')}} | Definició inicial. |
{{CompatibilityTable}}
| Característica | Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari |
|---|---|---|---|---|---|
| Suport bàsic |
{{ CompatChrome(38) }} [1] |
{{ CompatGeckoDesktop("13") }} | {{ CompatIE("11") }} | 25 | 7.1 |
Argument al constructor: new Set(iterable) |
{{ CompatChrome(38) }} | {{ CompatGeckoDesktop("13") }} | {{CompatNo}} | 25 | {{CompatNo}} |
| iterable | {{ CompatChrome(38) }} | {{ CompatGeckoDesktop("17") }} | {{CompatNo}} | 25 | 7.1 |
Set.clear() |
{{ CompatChrome(38) }} | {{CompatGeckoDesktop("19")}} | {{ CompatIE("11") }} | 25 | 7.1 |
Set.keys(), Set.values(), Set.entries() |
{{ CompatChrome(38) }} | {{CompatGeckoDesktop("24")}} | {{CompatNo}} | 25 | 7.1 |
Set.forEach() |
{{ CompatChrome(38) }} | {{CompatGeckoDesktop("25")}} | {{ CompatIE("11") }} | 25 | 7.1 |
| Igualtat de valors per a -0 i 0 | {{ CompatChrome(38) }} | {{CompatGeckoDesktop("29")}} | {{CompatNo}} | 25 | {{CompatNo}} |
Argument del constructor: new Set(null) |
{{CompatVersionUnknown}} | {{CompatGeckoDesktop("37")}} | {{CompatUnknown}} | {{CompatUnknown}} | {{CompatUnknown}} |
Monkey-patched add() al Constructor |
{{CompatVersionUnknown}} | {{CompatGeckoDesktop("37")}} | {{CompatUnknown}} | {{CompatUnknown}} | {{CompatUnknown}} |
Set[@@species] |
{{CompatUnknown}} | {{CompatGeckoDesktop("41")}} | {{CompatUnknown}} | {{CompatUnknown}} | {{CompatUnknown}} |
Set() sense new llença excepció |
{{CompatUnknown}} | {{CompatGeckoDesktop("42")}} | {{CompatUnknown}} | {{CompatUnknown}} | {{CompatUnknown}} |
| Característica | Android | Chrome for Android | Firefox Mobile (Gecko) | IE Mobile | Opera Mobile | Safari Mobile |
|---|---|---|---|---|---|---|
| Suport bàsic | {{CompatNo}} | {{CompatChrome(38)}} [1] | {{ CompatGeckoMobile("13") }} | {{CompatNo}} | {{CompatNo}} | 8 |
Argument al constructor: new Set(iterable) |
{{CompatNo}} | {{CompatChrome(38)}} | {{ CompatGeckoMobile("13") }} | {{CompatNo}} | {{CompatNo}} | {{CompatNo}} |
| iterable | {{CompatNo}} | {{CompatNo}} | {{ CompatGeckoMobile("17") }} | {{CompatNo}} | {{CompatNo}} | 8 |
Set.clear() |
{{CompatNo}} | {{ CompatChrome(38) }} | {{CompatGeckoMobile("19")}} | {{CompatNo}} | {{CompatNo}} | 8 |
Set.keys(), Set.values(), Set.entries() |
{{CompatNo}} | {{ CompatChrome(38) }} | {{CompatGeckoMobile("24")}} | {{CompatNo}} | {{CompatNo}} | 8 |
Set.forEach() |
{{CompatNo}} | {{ CompatChrome(38) }} | {{CompatGeckoMobile("25")}} | {{CompatNo}} | {{CompatNo}} | 8 |
| Igualtat de valors per a -0 i 0 | {{CompatNo}} | {{ CompatChrome(38) }} | {{CompatGeckoMobile("29")}} | {{CompatNo}} | {{CompatNo}} | {{CompatNo}} |
Argument del constructor: new Set(null) |
{{CompatUnknown}} | {{CompatVersionUnknown}} | {{CompatGeckoMobile("37")}} | {{CompatUnknown}} | {{CompatUnknown}} | {{CompatUnknown}} |
Monkey-patched add() al Constructor |
{{CompatUnknown}} | {{CompatVersionUnknown}} | {{CompatGeckoMobile("37")}} | {{CompatUnknown}} | {{CompatUnknown}} | {{CompatUnknown}} |
Set[@@species] |
{{CompatUnknown}} | {{CompatUnknown}} | {{CompatGeckoMobile("41")}} | {{CompatUnknown}} | {{CompatUnknown}} | {{CompatUnknown}} |
Set() sense new llença excepció |
{{CompatUnknown}} | {{CompatUnknown}} | {{CompatGeckoMobile("42")}} | {{CompatUnknown}} | {{CompatUnknown}} | {{CompatUnknown}} |
[1] La característica estava disponible sota una preferència a partir de Chorem 31. Al chrome://flags, activeu l'entrada “Activa JavaScript Experimental”.