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 umNaN
(2 * "string" / 2
).
Teste seu conhecimento
Qual é o resultado da transmissão de false
para Number()
?
Qual é o resultado da seguinte operação matemática?
"Six" * 3