Dúvida sobre conversão para Number no JavaScript #2267
-
Gostaria de um auxilio em uma dúvida: Por que é preciso converter o número para Number diversas vezes? Não bastaria fazer a conversão uma vez só antes da função? Por exemplo: let num = document.querySelector('input#fnum') Tentei fazer dessa forma (convertendo apenas no começo), mas não funcionou e eu gostaria de entender o motivo, alguém poderia me explicar?) O código que estou me baseando para fazer essa pergunta está abaixo: <script> let num = document.querySelector('input#fnum') let lista = document.querySelector('select#flista') let res = document.querySelector('div#res') let valores = [] function isNumero(n){ if(Number(n) >= 1 && Number(n) <= 100){ return true }else{ return false } } function inLista(n, l){ if (l.indexOf(Number(n)) != -1){ return true } else { return false } } function adicionar(){ if(inLista(num.value, valores) == false){ valores.push(Number(num.value)) let item = document.createElement('option') item.text = `valor ${num.value} adicionado.` lista.appendChild(item) res.innerHTML = '' }else { window.alert('Valor inválido ou já encontrado na lista') } num.value = '' num.focus() } function finalizar(){ if (valores.length == 0){ window.alert('Adicione valores anes de finalizar') }else{ let tot = valores.length let maior = valores [0] let menor = valores [0] let soma = 0 let media = 0 for(let pos in valores){ soma += valores[pos] if(valores[pos] > maior){ maior = valores[pos] if(valores[pos] < menor) menor = valores[pos] } } media = soma / tot res.innerHTML = '' res.innerHTML += `Ao todo temos ${tot} cadastrados` res.innerHTML += `O maior valor informado foi ${maior} ` res.innerHTML += `O menor valor informado foi ${menor} ` res.innerHTML += `Somando todos os valores temos ${soma} ` res.innerHTML += `A média dos números é ${media}` } } </script> |
Beta Was this translation helpful? Give feedback.
Replies: 4 comments 7 replies
-
Salvo erro, nada impede que se faça uma conversão numa variável global e que esse valor seja reutilizado várias vezes. Aconselho-te a mudar a nomenclatura das variáveis: |
Beta Was this translation helpful? Give feedback.
-
Eai parceira, de buenas? Você esqueceu de usar os backsticks para fazer syntax highlight do código aqui, e o GitHub deixou o código ilegível, aqui vai seu snippet formatado de forma legível. let num = document.querySelector("input#fnum");
let lista = document.querySelector("select#flista");
let res = document.querySelector("div#res");
let valores = [];
function isNumero(n) {
if (Number(n) >= 1 && Number(n) <= 100) {
return true;
} else {
return false;
}
}
function inLista(n, l) {
if (l.indexOf(Number(n)) != -1) {
return true;
} else {
return false;
}
}
function adicionar() {
if (inLista(num.value, valores) == false) {
valores.push(Number(num.value));
let item = document.createElement("option");
item.text = `valor ${num.value} adicionado.`;
lista.appendChild(item);
res.innerHTML = "";
} else {
window.alert("Valor inválido ou já encontrado na lista");
}
num.value = "";
num.focus();
}
function finalizar() {
if (valores.length == 0) {
window.alert("Adicione valores anes de finalizar");
} else {
let tot = valores.length;
let maior = valores[0];
let menor = valores[0];
let soma = 0;
let media = 0;
for (let pos in valores) {
soma += valores[pos];
if (valores[pos] > maior) {
maior = valores[pos];
if (valores[pos] < menor) menor = valores[pos];
}
}
media = soma / tot;
res.innerHTML = "";
res.innerHTML += `Ao todo temos ${tot} cadastrados`;
res.innerHTML += `O maior valor informado foi ${maior}`;
res.innerHTML += `O menor valor informado foi ${menor}`;
res.innerHTML += `Somando todos os valores temos ${soma}`;
res.innerHTML += `A média dos números é ${media}`;
}
} |
Beta Was this translation helpful? Give feedback.
-
Entendi seu questionamento, é que seu script está usando muito o input.value e por definição essa propriedade do elemento input sempre retorna uma string. |
Beta Was this translation helpful? Give feedback.
-
@veronicamedeiros olha a dica que descobri hoje no Twitter: const input = document.querySelector('input#fnum')
console.log(typeof input.valueAsNumber) // number
console.log(typeof input.value) // string spec: https://html.spec.whatwg.org/multipage/input.html#dom-input-valueasnumber |
Beta Was this translation helpful? Give feedback.
Entendi seu questionamento, é que seu script está usando muito o input.value e por definição essa propriedade do elemento input sempre retorna uma string.