--- 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.size
Set
. Consente l'aggiunta di proprietà a tutti gli oggetti Set
.Instanze Set
Tutte 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')}}
Set
var 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
Array
var 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”.