Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Not a Number

Pessoal, estou enfrentando o seguinte problema.

Quando eu tento retornar o valor de somar, ele me retorna um NaN, mesmo quando eu imprimo os números dele com console.log. No entanto se eu fizer uma verificação com IF depois do FOR, ai sim ele me retorna o valor de somar, vocês sabem o por que de isso acontecer?

function multiplicar(valores){

  var num = 0;
  var somar = 1;
  for(var i= 0; i <= valores.length; i++){ 

      num = valores[i];
      console.log(num)
    somar = somar * num;
      console.log(somar)

    }
  return somar;
}
1 resposta
solução!

Olá Raissa, tudo bem com você?

Antes de mais nada eu vou assumir que esse valores é um array apenas de números, ok?

O problema está aqui:

for(var i= 0; i <= valores.length; i++){

Vou te mostrar uma pequena execução do seu código, que acredito que ficará mais claro :)

Suponha que:

valores = [ 2, 4]

Então:

num = 0
somar = 1

Vamos para a primeira execução

i = 0
num = valores[i]
console.log(num)  => 2
somar = 2 *1 -> 2

Tudo normal, agora a segunda execução:

i = 1
num = valores[i]
console.log(num)  => 4
somar = 2 *4 -> 8

E agora temos o probleminha :)

Temos que i = 2, valores.length = 2 e a nossa verificação é de i <= valores.length, ou seja, teremos mais uma execução:

i = 2
num = valores[i]

Mas quem e valores[2] ?

Não existe, então o javascript dirá que é um valor indefinido, ou seja, undefined e dessa forma quando multiplicamos um valor númerico por algo indefinido:

somar = 8 * undefined

Temos um NaN (Not a Number)

Para corrigir esse código, é bem simples, precisamos percorrer enquanto o i for menor que valores.length, quando eles chegarem no mesmo valor é porque não temos esse indice :)

  for(var i= 0; i < valores.length; i++){ 

E dessa forma o nosso código irá funcionar corretamente :)

Abraços e Bons Estudos!