Parseint() is returning Nan

Asked

Viewed 267 times

1

My code is this:

arrayCods = lista.split(",");
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];
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??

As I explained in the comments, when printing the variable, the console prints Nan, but when printing typeof the variable, returns Number. So why can’t I get this number, why does Nan return?

  • 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

  • You have to test the number before parseint with console.

  • I tested, and returns the number: console.log("Irem1: " +i_rem); Print on console: Irem1: "3"

  • It’s not php, it’s javascript

  • 1

    typeof NaN === typeof 0 //return true, that is to say, NaN is the type Number but it is not a valid number

1 answer

1


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">

Browser other questions tagged

You are not signed in. Login or sign up in order to post.