const set = new Set("123"); console.log(set);La salida es "Establecer { '1', '2', '3' }"
Debido a que las cadenas son iterables , y cuando le das al constructor Set un objeto iterable,¹ recorre los valores proporcionados por el iterador del objeto y los agrega al conjunto. En el caso de las cadenas, el iterador de cadenas itera los puntos de código de las cadenas; en su ejemplo, "1" , "2" y "3" . (Para obtener más información sobre "puntos de código" frente a "unidades de código" y qué es una cadena, lea la publicación de mi blog ).
Si desea agregar una cadena a un conjunto, debe agregarla por separado o envolverla en otro iterable (como una matriz):
// Add separately: let set = new Set(); set.add("123"); console.log(set.size); // 1 console.log([...set]); // ["123"] // Or wrap: set = new Set(["123"]); console.log(set.size); // 1 console.log([...set]); // ["123"]¹ (o una primitiva como una cadena que fuerza a un objeto iterable)
El constructor Set toma un iterable y toma todos sus valores.
Las cadenas tienen una propiedad @@iterator por defecto que las hace iterables:
const foo = "xyz"; console.log(...foo); const [a, b, c] = foo; console.log(a, b, c); for (const char of foo) console.log(char); Por lo tanto, esto es exactamente lo que sucede cuando pasa una cadena a un constructor Set : dibuja cada valor tal como lo haría con cualquier otro iterable:
const foo = "xyz"; const bar = [1, 2, 3] console.log("set of string:", new Set(foo)); console.log("set of array :", new Set(bar)); <h1>Check the browser console</h1>