# ECMAScript
Para saber o que é suportado em em cada versao e onde, podemos usar este site aqui (opens new window).
# Spread e Rest (ES6)
Spread (espalha os elementos)
const numbers = [1, 10, 99, -5]
// A funcao max espera cada elemento, nao o array completo assim Math.max(numbers)
// O spred vai fazer como se fosse Math.max(1, 10, 99, -5)
console.log(Math.max(...numbers))
1
2
3
4
5
2
3
4
5
Outro exemplo
const turmaA = ['João', 'Maria', 'Fernanda']
const turmaB = ['Fernando', 'Miguel', 'Lorena', ...turmaA]
const turmaC = ['Carlos']
const turmaW = ['Paula', ...turmaC, 'Mateus', ...turmaA]
console.log(turmaB)
console.log(turmaW)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
Rest (Recebe vairos valores e retorna tudo dento de um)
function retornaArray(...argumentos: number[]): number {
return argumentos
}
// Passa os numeros separados e a funcao junta tudo com o REST num array
const numeros = retornaArray(1, 2, 3, 4, 5)
conosle.log(numeros)
// Separando os numeros com Spread
const numbers = [1, 10, 99, -5]
conosle.log(retornaArray(...numbers))
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
Outro exemplo
// Passando outros argumentos (sempre o Rest deve ser o ultimo parametro para nao dar erro)
function retornaArray(a: number, ...argumentos: number[]): number {
// O a sera o primeiro numero passado na funcao e os demais sera os argumentos
console.log(a)
return argumentos
}
const numeros = retornaArray(1, 2, 3, 4, 5, 345, 623)
conosle.log(numeros)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
# Destructuring
Em Array
const [motor, ano] = ['Motor Zetec', '2020']
console.log(motor)
console.log(ano)
1
2
3
4
2
3
4
Em Objeto
const item = {
nome: 'SSD 480GB',
preco: 200,
marca: 'X',
caracteristicas: {
x: 'Importado'
}
}
// Sem Alias
const { nome, preco, caracteristicas: { w } } = item
console.log(nome)
console.log(preco)
// Com Alias
const { nome: n, preco: p } = item
console.log(n)
console.log(p)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# Optional Chaining
Encadeamento opcional
Verifica se o valor a esquerda de ?.
é null ou undefined
Age diferente do que &&
, este por sua vez atua em valores falsos (string vazia, 0, NaN e false)
let x = foo?.bar.baz();
// Se o foo for null ou undefined retorna um undefined
// Seria o mesmo que isso
let x = (foo === null || foo === undefined) ? foo.bar.baz();
1
2
3
4
5
2
3
4
5
Outro exemplo, agora deixando como opcional bar tbm
if (foo?.bar?.baz) {}
// Se o foo e bar for null ou undefined retorna um undefined
// Seria o mesmo que isso
if (foo && foo.bar && foo.bar.baz) {}
1
2
3
4
5
2
3
4
5
# Nullish Coalescing
Coalescência nula
Retorna a um valor padrão quando trabalhado com null ou undefined
É usado para evitar o comportamento não intencional do ||
para 0, NaNe e "", ou seja, tratando valores Falsos
let x = foo ?? bar()
// foo sera usado quando estiver existir, quando for null ou undefined seu valor vai ser bar()
// Seria o mesmo que isso
let x = (foo !== null && foo !== undefined) ? oo : bar();
1
2
3
4
5
2
3
4
5
← Vanilla Introdução →