--- title: Set slug: Web/JavaScript/Reference/Global_Objects/Set translation_of: Web/JavaScript/Reference/Global_Objects/Set original_slug: Web/JavaScript/Referencia/Objectes_globals/Set ---
{{JSRef}}

L'objecte Set permet emmagatzemar valors únics de qualsevol tipus, ja siguin {{Glossary("Primitive", "valors primitius")}} o bé referències a objectes.

Sintaxi

new Set([iterable]);

Paràmetres

iterable
Si rep un objecte iterable, tots els seus elements seran afegits al nou Set. null serà tractat com a undefined.

Descripció

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.

Igualtat de valors

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).

Propietats

Set.length
El valor de la propietat length és 0.
{{jsxref("Set.@@species", "get Set[@@species]")}}
La funció constructora que s'ha utilitzat per a crear objectes derivats.
{{jsxref("Set.prototype")}}
Representa el prototipus per al constructor Set. Permet afegir propietats a tots els objectes Set.

Instàncies de Set

Totes les instàncies de Set hereten de {{jsxref("Set.prototype")}}.

Propietats

{{page('ca/Web/JavaScript/Reference/Global_Objects/Set/prototype','Propietats')}}

Mètodes

{{page('ca/Web/JavaScript/Reference/Global_Objects/Set/prototype','Mètodes')}}

Exemples

Utilitzar l'objecte Set

var 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

Iterarar Sets

// 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

Relació amb objectes Array

var 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

Especificacions

Especificació Estat Comentaris
{{SpecName('ES6', '#sec-set-objects', 'Set')}} {{Spec2('ES6')}} Definició inicial.

Compatibilitat amb navegadors

{{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”.

Vegeu també