The parseInt
does not guarantee that the value is in fact a number, it just converts the type.
Here’s what you said:
I tested, and returns the number: console.log("Irem1: " +i_rem); Print
on the console: Irem1: "3"
Note that the value received is a number between double quotes: "3"
.
With this, the quotation marks invalidate the number, making it NaN
.
Even a letter inside a parseInt
returns type number
, see:
var numero = parseInt("a");
console.log(numero);
console.log(typeof(numero));
Apparently the array generated by the code arrayCods = lista.split(",");
is returning values with double quotes, and so generates Nan.
The solution is to remove the quotes with .replace
:
// remove todas as aspas duplas
i_rem = arrayCods[i_rem].replace(/"/g,'');
Example:
lista = '"1", "2", "3"';
arrayCods = lista.split(",");
//var arrayCods = ["1","2","3"];
var i_rem = document.getElementById('listaUsuarios').value;
//Até aqui tudo bem, a i_rem contém um valor numérico extraído do html.
i_rem = arrayCods[i_rem].replace(/"/g,'');
console.log("Irem1: " +i_rem); //IMPRIME CORRETAMENTE O NÚMERO CONTIDO NA STRING
console.log(typeof(i_rem)); // TUDO CERTO AQUI. I_REM É UMA STRING
var numero = parseInt(i_rem);
console.log(numero); // AQUI RETORNA NAN
console.log(typeof(numero)); // MAS ISSO RETORNA CORRETAMENTE DIZENDO QUE O TIPO DA VARIÁVEL NUMER É NUMBER. SE É NUMBER, COMO AO IMPRIMI-LO TENHO UM NAN??
<input type="text" id="listaUsuarios" value="2">
Alternative to replace:
You can also use .match
to take only the string number:
i_rem = arrayCods[i_rem].match(/\d+/)[0];
Example:
lista = '"1", "2", "3"';
arrayCods = lista.split(",");
//var arrayCods = ["1","2","3"];
var i_rem = document.getElementById('listaUsuarios').value;
//Até aqui tudo bem, a i_rem contém um valor numérico extraído do html.
i_rem = arrayCods[i_rem].match(/\d+/)[0];
console.log("Irem1: " +i_rem); //IMPRIME CORRETAMENTE O NÚMERO CONTIDO NA STRING
console.log(typeof(i_rem)); // TUDO CERTO AQUI. I_REM É UMA STRING
var numero = parseInt(i_rem);
console.log(numero); // AQUI RETORNA NAN
console.log(typeof(numero)); // MAS ISSO RETORNA CORRETAMENTE DIZENDO QUE O TIPO DA VARIÁVEL NUMER É NUMBER. SE É NUMBER, COMO AO IMPRIMI-LO TENHO UM NAN??
<input type="text" id="listaUsuarios" value="2">
It should be the same thing as this: https://answall.com/questions/165021/por-que-a-constante-nan-%C3%A9-rated-as-true-to-test%C3%A1-la-com-is-Numeric
– Wallace Maxters
You have to test the number before parseint with console.
– Wallace Maxters
I tested, and returns the number: console.log("Irem1: " +i_rem); Print on console: Irem1: "3"
– Lucas Pletsch
It’s not php, it’s javascript
– Lucas Pletsch
typeof NaN === typeof 0 //return true
, that is to say,NaN
is the typeNumber
but it is not a valid number– Costamilam