Números

Um valor numérico é composto por qualquer série de caracteres numéricos, por exemplo:

5

O tipo de dados numérico também inclui algumas propriedades globais especiais que representam conceitos numéricos, como Infinity e NaN, um valor que significa "não é um número", um possível resultado de tentar fazer cálculos matemáticos em valores não numéricos.

O objeto numérico

Quando um valor é transmitido para a função Number(), esse valor é convertido no equivalente de número. Por exemplo, uma string numérica resulta em um primitivo de número equivalente:

Number( "10" );
> 10

Transmitir um valor false ou null para Number() retorna 0, e true retorna 1.

Number( null );
> 0

Number( false );
> 0

Number( true );
> 1`

Se não for possível converter um valor, como no caso de undefined ou uma string que contém caracteres não numéricos, a função Number retornará NaN:

Number( undefined );
> NaN

Number( "The number 3." );
> NaN

Conforme detalhado em Herança de protótipo, você provavelmente terá pouco ou nenhum motivo para usar o objeto Number como construtor, porque ele cria um objeto Number em vez de um literal numérico.

let numObject = new Number( 15 );

numObject;
> Number { 15 }

Esse objeto se comporta como o valor atribuído para operações matemáticas, mas falha em comparações rígidas de igualdade em relação a literais de números, porque os tipos de dados não são correspondentes e não oferecem qualquer benefício prático em relação a um valor literal.

let tenObject = new Number( 10 );

tenObject + 5;
> 15

tenObject === 10;
> false

Flutuações e números inteiros

O JavaScript tem apenas um tipo de número: números de ponto flutuante de precisão dupla IEEE 754-1985 de 64 bits entre -2^1024 e 2^1024. Antes de o JavaScript armazenar um número na memória, ele primeiro converte esse número em um número de ponto flutuante binário, também chamado de float.

Esse armazenamento de 64 bits (um bit de "sinal" positivo ou negativo, 11 bits para um expoente e 52 bits para uma fração) pode causar erros de precisão com qualquer número de dígitos que não se encaixem em um intervalo permitido. Essa limitação é inerente ao tipo de dados numéricos do JavaScript.

0.1 + 0.7
> 0.7999999999999999

Um valor numérico pode ser armazenado como um número inteiro, um número de ponto flutuante sem uma fração entre -(2^53 − 1) e 2^53 − 1. Como os pontos flutuantes e números inteiros são armazenados da mesma maneira, não há diferença prática no funcionamento desses números. No entanto, recomendamos usar números inteiros sempre que possível para evitar erros de precisão.

Operadores numéricos

Quando você usa operadores matemáticos padrão com primitivos numéricos, a ordem de operações matemáticas se aplica: todas as expressões entre parênteses são avaliadas primeiro, seguidas por expoentes, multiplicação, divisão, adição e subtração.

Operador Nome Descrição Uso Resultado
+ Adição 2+2 4
- Subtração 4-2 2
* Multiplicação 2*5 10
/ Divisão 10/5 2
++ Incremento Adiciona um a um número 2++ 3
-- Redução Subtrai um de um número 3-- 2
** Expoente Retorna o resultado da elevação do primeiro operando
para a potência do segundo operando.
2**4 16
% Restante Retorna o restante à esquerda quando o primeiro operando
é dividido pelo segundo operando.
12%5 2

Também é possível usar operadores de atribuição matemática para executar uma operação matemática no valor de uma variável e imediatamente atribuir esse valor recém-calculado à variável.

Operador Nome Uso
+= Atribuição de adição myValue += 2
-= Atribuição de subtração myValue -= 2
*= Atribuição de multiplicação myValue *= 2
/= Atribuição da divisão myValue /= 2
**= Atribuição do expoente myValue **= 2
%= Atribuição restante myValue %= 2

Valores simbólicos

O primitivo numérico também se aplica a alguns casos especiais: o valor "não é um número" (NaN) e um valor que representa infinito que pode ser positivo (Infinity) ou negativo (-Infinity).

Talvez você encontre Infinity raramente como resultado da divisão por zero. Nesse caso, a maioria das linguagens de programação gera um erro:

10 / 0
> Infinity

Lembre-se de que JavaScript diferencia maiúsculas de minúsculas. Infinity é um tipo de dados numéricos que representa o conceito de infinito, mas infinity não tem um significado especial:

Infinity
> Infinity

infinity
> Uncaught ReferenceError: infinity is not defined

NaN (que significa "Não é um número") aparece com mais frequência nos casos em que o resultado de uma operação aritmética não pode ser expresso como um número. Por exemplo, como o JavaScript tenta inferir o tipo de dados com base no valor e no contexto, um literal de string contendo apenas um número pode ser usado em uma operação matemática:

"2" * 2;
> 4

No entanto, se essa string não puder ser analisada como um valor numérico, a operação matemática vai resultar em um não numérico:

"two" * 2;
> NaN

NaN é retornado sempre que um valor inválido é representado como um número em uma operação matemática. Os exemplos incluem:

  • Número de conversões com falha (por exemplo, parseInt( undefined ))
  • Operações aritméticas em que o resultado não é um número real (por exemplo, 0 / 0, Math.sqrt( -10 )).
  • Uma operação aritmética com um resultado indeterminado (0 * Infinity)
  • Uma operação aritmética que inclui um resultado NaN explícito (NaN + 2) ou um NaN (2 * "string" / 2).

Teste seu conhecimento

Qual é o resultado da transmissão de false para Number()?

0
Falso
NaN
1

Qual é o resultado da seguinte operação matemática?

"Six" * 3

NaN
2
18
Verdadeiro
0