Symbol.isConcatSpreadable
Baseline
Ampliamente disponible
Esta característica está consolidada y funciona en muchos dispositivos y versiones de navegador. Está disponible en todos los navegadores desde abril de 2017.
El símbolo conocido como Symbol.isConcatSpreadable se utiliza para configurar si un objeto debe ser aplanado a sus elementos del array cuando se utiliza el método Array.prototype.concat().
Pruébalo
const alpha = ["a", "b", "c"];
const numeric = [1, 2, 3];
let alphaNumeric = alpha.concat(numeric);
console.log(alphaNumeric);
// Expected output: Array ["a", "b", "c", 1, 2, 3]
numeric[Symbol.isConcatSpreadable] = false;
alphaNumeric = alpha.concat(numeric);
console.log(alphaNumeric);
// Expected output: Array ["a", "b", "c", Array [1, 2, 3]]
Descripción
El símbolo @@isConcatSpreadable (Symbol.isConcatSpreadable) puede ser definido como una propiedad propia o heredada y su valor es un booleano. Puede controlar el comportamiento de los arrays y de los objetos tipo array:
- Para los objetos tipo matriz, el comportamiento por defecto es extender (aplanar) los elementos.
Symbol.isConcatSpreadablepuede evitar el aplanamiento en estos casos. - En el caso de los objetos tipo array, el comportamiento por defecto es no extender ni aplanar.
Symbol.isConcatSpreadablepuede forzar el aplanamiento en estos casos.
Atributos de la propiedad Symbol.isConcatSpreadable | |
|---|---|
| Sobrescribir | No |
| Numerable | No |
| Configurable | No |
Ejemplos
>Arrays
Por defecto, Array.prototype.concat() extiende (aplana) las matrices en su resultado:
let alpha = ['a', 'b', 'c'],
let numeric = [1, 2, 3]
let alphaNumeric = alpha.concat(numeric)
console.log(alphaNumeric) // Resultado: ['a', 'b', 'c', 1, 2, 3]
Al establecer el valor de Symbol.isConcatSpreadable a false, puedes desactivar el comportamiento por defecto:
let alpha = ["a", "b", "c"];
let numeric = [1, 2, 3];
numeric[Symbol.isConcatSpreadable] = false;
let alphaNumeric = alpha.concat(numeric);
console.log(alphaNumeric); // Resultado: ['a', 'b', 'c', [1, 2, 3] ]
Objetos tipo array
Para los objetos tipo array, el valor por defecto es no extender. Symbol.isConcatSpreadable necesita ser establecido a true para obtener un array aplanado:
let x = [1, 2, 3];
let fakeArray = {
[Symbol.isConcatSpreadable]: true,
length: 2,
0: "hello",
1: "world",
};
x.concat(fakeArray); // [1, 2, 3, "hello", "world"]
Nota: La propiedad length se utiliza para controlar el número de propiedades del objeto a añadir. En el ejemplo anterior, length:2 indica que hay que añadir dos propiedades.
Especificaciones
| Especificación |
|---|
| ECMAScript® 2027 Language Specification> # sec-symbol.isconcatspreadable> |