--- title: Set slug: Web/JavaScript/Reference/Global_Objects/Set translation_of: Web/JavaScript/Reference/Global_Objects/Set ---
new Set([iterabile]);
Gli oggetti Set sono collezioni di valori, e possibile iterare i valori nel loro ordine di inserimento. Un valore in un Set può occorrere solo una volta; è quindi unico nella collezione.
Dato che ogni valore in un Set deve essere unico, dovra essere controllata l'uguaglianza di un nuovo valore con valori già presenti nel Set, questa operazione non è basata sullo stesso algoritmo usato per l'operatore ===. Nello specifico, per i Set, +0 (che è strettamente uguale a -0) e -0 sono valori differenti. Comunque, questo è stato cambiato nell'ultima specifica ECMAScript 6. Partendo da Gecko 29.0 {{geckoRelease("29")}} ({{bug("952870")}}) e da questa recente nightly Chrome issue, +0 e -0 sono trattati come valori identici nell'oggetto Set. Inoltre, NaN e undefined possono essere memorizzati nei Set. NaN è considerato unguale a NaN (anche se NaN !== NaN).
Set.sizeSet. Consente l'aggiunta di proprietà a tutti gli oggetti Set.Instanze SetTutte le instanze di Set ereditano da {{jsxref("Set.prototype")}}.
{{page('it-IT/Web/JavaScript/Reference/Global_Objects/Set/prototype','Properties')}}
{{page('it-IT/Web/JavaScript/Reference/Global_Objects/Set/prototype','Methods')}}
Setvar mySet = new Set();
mySet.add(1);
mySet.add(5);
mySet.add("some text");
var o = {a: 1, b: 2};
mySet.add(o);
mySet.has(1); // true
mySet.has(3); // false, 3 non è stato aggiunto al set
mySet.has(5); // true
mySet.has(Math.sqrt(25)); // true
mySet.has("Some Text".toLowerCase()); // true
mySet.has(o); // true
mySet.size; // 4
mySet.delete(5); // rimuove 5 dal set
mySet.has(5); // false, 5 è stato rimosso
mySet.size; // 3, abbiamo rimosso 1 valore
// iterando i valori in un set
// logga gli item in ordine: 1, "testo di esempio"
for (let item of mySet) console.log(item);
// logga gli item in ordine: 1, "testo di esempio"
for (let item of mySet.keys()) console.log(item);
// logga gli item in ordine: 1, "testo di esempio"
for (let item of mySet.values()) console.log(item);
// logga gli item in ordine: 1, "testo di esempio"
//(chiavi e valori qui sono uguali)
for (let [key, value] of mySet.entries()) console.log(key);
// converte un set in un Array semplice (con )
// convert set to plain Array (con Array comprehensions)
var myArr = [v for (v of mySet)]; // [1, "some text"]
// Alternativa (con Array.from)
var myArr = Array.from(mySet); // [1, "some text"]
// Il seguente snippet funzionerà anche in un documento HTML
mySet.add(document.body);
mySet.has(document.querySelector("body")); // true
// conversione tra Set e Array
mySet2 = new Set([1,2,3,4]);
mySet2.size; // 4
[...mySet2]; // [1,2,3,4]
// l'itersezione può essere simulata con
var intersection = new Set([...set1].filter(x => set2.has(x)));
// la differenza può essere simulata con
var difference = new Set([...set1].filter(x => !set2.has(x)));
// Itera i valori di un set con forEach
mySet.forEach(function(value) {
console.log(value);
});
// 1
// 2
// 3
// 4
Arrayvar myArray = ["value1", "value2", "value3"];
// Uso del costruttore di Set per trasformare un Array in un Set
var mySet = new Set(myArray);
mySet.has("value1"); // ritorna true
// Usa l'operatore spread per trasformare un Set in un Array
console.log(uneval([...mySet])); // Mostrerà lo stesso identico Array di myArray
| Specification | Status | Comment |
|---|---|---|
| {{SpecName('ES6', '#sec-set-objects', 'Set')}} | {{Spec2('ES6')}} | Initial definition. |
| {{SpecName('ESDraft', '#sec-set-objects', 'Set')}} | {{Spec2('ESDraft')}} |
{{CompatibilityTable}}
| Feature | Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari |
|---|---|---|---|---|---|
| Basic support |
{{ CompatChrome(38) }} [1] |
{{ CompatGeckoDesktop("13") }} | {{ CompatIE("11") }} | 25 | 7.1 |
Constructor argument: 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 |
| Value equality for -0 and 0 | {{ CompatChrome(38) }} | {{CompatGeckoDesktop("29")}} | {{CompatNo}} | 25 | {{CompatNo}} |
Constructor argument: new Set(null) |
{{CompatVersionUnknown}} | {{CompatGeckoDesktop("37")}} | {{CompatUnknown}} | {{CompatUnknown}} | {{CompatUnknown}} |
Monkey-patched add() in Constructor |
{{CompatVersionUnknown}} | {{CompatGeckoDesktop("37")}} | {{CompatUnknown}} | {{CompatUnknown}} | {{CompatUnknown}} |
Set[@@species] |
{{CompatUnknown}} | {{CompatGeckoDesktop("41")}} | {{CompatUnknown}} | {{CompatUnknown}} | {{CompatUnknown}} |
Set() without new throws |
{{CompatUnknown}} | {{CompatGeckoDesktop("42")}} | {{CompatUnknown}} | {{CompatUnknown}} | {{CompatUnknown}} |
| Feature | Android | Chrome for Android | Firefox Mobile (Gecko) | IE Mobile | Opera Mobile | Safari Mobile |
|---|---|---|---|---|---|---|
| Basic support | {{CompatNo}} | {{CompatChrome(38)}} [1] | {{ CompatGeckoMobile("13") }} | {{CompatNo}} | {{CompatNo}} | 8 |
Constructor argument: 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 |
| Value equality for -0 and 0 | {{CompatNo}} | {{ CompatChrome(38) }} | {{CompatGeckoMobile("29")}} | {{CompatNo}} | {{CompatNo}} | {{CompatNo}} |
Constructor argument: new Set(null) |
{{CompatUnknown}} | {{CompatVersionUnknown}} | {{CompatGeckoMobile("37")}} | {{CompatUnknown}} | {{CompatUnknown}} | {{CompatUnknown}} |
Monkey-patched add() in Constructor |
{{CompatUnknown}} | {{CompatVersionUnknown}} | {{CompatGeckoMobile("37")}} | {{CompatUnknown}} | {{CompatUnknown}} | {{CompatUnknown}} |
Set[@@species] |
{{CompatUnknown}} | {{CompatUnknown}} | {{CompatGeckoMobile("41")}} | {{CompatUnknown}} | {{CompatUnknown}} | {{CompatUnknown}} |
Set() without new throws |
{{CompatUnknown}} | {{CompatUnknown}} | {{CompatGeckoMobile("42")}} | {{CompatUnknown}} | {{CompatUnknown}} | {{CompatUnknown}} |
[1] La caratteristica è disponibile come opzione da Chrome 31. In chrome://flags, attivare la voce “Enable Experimental JavaScript”.