Symbol.isConcatSpreadable

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since September 2015.

O Symbol.isConcatSpreadable é um símbolo conhecido que é usado para configurar se um objeto deve ser achatado para um elemento da array quando usado o método Array.prototype.concat().

Experimente

Descrição

O @@isConcatSpreadable símbolo (Symbol.isConcatSpreadable) pode também ser definido como uma propriedade própria ou herdada e seu valor é um booleano. Ele consegue controlar o comportamento das arrays e objetos semelhantes a array:

  • For array objects, the default behavior is to spread (flatten) elements. Symbol.isConcatSpreadable can avoid flattening in these cases.
  • For array-like objects, the default behavior is no spreading or flattening. Symbol.isConcatSpreadable can force flattening in these cases.
Property attributes of Symbol.isConcatSpreadable
Writableno
Enumerableno
Configurableno

Exemplos

Arrays

Por padrão, o Array.prototype.concat() espalha (alinha) arrays no seus resultados:

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]

Quando configurando o Symbol.isConcatSpreadable para false, o comportamento padrão dele:

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 de array semelhantes

Para objetos de array semelhantes, o padrão não é espalhado. Symbol.isConcatSpreadableprecisa ser configurado para true para poder conseguir um a array alinhada:

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: A propriedade length é usada para controlar o número de propriedade dos objetos para ser adicionado. No exemplo acima, length:2 indica que duas propriedades tem de ser adicionado.

Especificações

Specification
ECMAScript Language Specification
# sec-symbol.isconcatspreadable

Compatibilidade com navegadores

BCD tables only load in the browser

Veja também