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(
""))
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))