--- title: Symbol.isConcatSpreadable slug: Web/JavaScript/Reference/Global_Objects/Symbol/isConcatSpreadable translation_of: Web/JavaScript/Reference/Global_Objects/Symbol/isConcatSpreadable ---
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 {{jsxref("Array.prototype.concat()")}}.
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:
Symbol.isConcatSpreadable
can avoid flattening in these cases.Symbol.isConcatSpreadable
can force flattening in these cases.{{js_property_attributes(0,0,0)}}
Por padrão, o {{jsxref("Array.prototype.concat()")}} espalha (alinha) arrays no seus resultados:
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:
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] ]
Para objetos de array semelhantes, o padrão não é espalhado. Symbol.isConcatSpreadable
precisa ser configurado para true
para poder conseguir um a array alinhada:
let x = [1, 2, 3] let fakeArray = { [Symbol.isConcatSpreadable]: true, length: 2, 0: 'hello', 1: 'world' } x.concat(fakeArray) // [1, 2, 3, "hello", "world"]
Note: 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ção |
---|
{{SpecName('ESDraft', '#sec-symbol.isconcatspreadable', 'Symbol.isconcatspreadable')}} |
{{Compat("javascript.builtins.Symbol.isConcatSpreadable")}}