Symbol.isConcatSpreadable
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
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.isConcatSpreadable
puede evitar el aplanamiento en estos casos. - En el caso de los objetos tipo array, el comportamiento por defecto es no extender ni aplanar.
Symbol.isConcatSpreadable
puede 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:
js
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:
js
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:
js
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
Specification |
---|
ECMAScript Language Specification # sec-symbol.isconcatspreadable |
Compatibilidad con navegadores
BCD tables only load in the browser