Tipos e conversões

Números e strings

Todo valor possui um tipo associado a ele. Você já viu números, strings, listas.

Há uma distinção importante entre números e strings.

const um = 1 // número
const uno = "1" // string

Anteriormente, houve um caso em que acessar um caractere de uma string resultou em um número armazenado como string.

Esse exemplo é parecido, o "1" é uma string por causa das aspas.

Os dois valores acima não são idênticos.

console.log(1 === "1")
> false

Tentar fazer somas usando strings assim causa problemas:

console.log("4" + 2 + 0)
> "420"

Em vez de somar os números, a funcionalidade de juntar strings do + que ocorreu.

Nesse processo, o 2 e o 0 foram convertidos em strings implicitamente. Para consertar isso, convertemos o "4" para número assim:

console.log(Number("4") + 2 + 0)
> 6

De forma mais geral, Number() converte para número, String() para string.

console.log(String(13))
console.log(String(true))
console.log(String("Chinforinfola"))
console.log(Number("-1.50"))
> "13" > "true" > "Chinforinfola" > -1.5

				console.log(Number(""))
			
> 0

Tentou colocar algo que não seja um número no campo de texto?

O resultado acaba sendo um tal de NaN.

NaN é um acrônimo para "Not a Number", que significa "não é um número", em inglês. Até porque "abacaxi" não é um número.

console.log(Number("1️⃣")) // 1️⃣ também não é número
console.log(Number("")) // Mas aparentemente nada é
> NaN > 0

Outro jeito de converter de número para string é usando .toFixed():

let numero = 6.54321
console.log(numero.toFixed(3))
> "6.543"

Essa é outra daquelas funções que vão atrás do valor.

O número dentro dos parênteses define quantas casas aparecem depois da vírgula. Colocar um 0 aí arredonda o número para inteiro.

let inteiro = (9.4).toFixed(0)
// é necesário () em volta do número para usar .toFixed() diretamente
console.log(inteiro)
> "9"

Arredondamento para cima também acontece.

console.log((9.6).toFixed(0))
console.log((6.66666).toFixed(4))
> "10" > "6.6667"

E preenche com 0 para ficar do tamanho correto.


				let reais = 0
console.log("R$" + reais.toFixed(2))
			
> "R$0.00"