ParseInt () is returning NaN

1

My code is as follows:

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 variable typeof, it returns Number. So why can not I get this number, because NaN returns?

    
asked by anonymous 27.05.2018 / 23:46

1 answer

1

parseInt does not guarantee that the value is actually a number, it just converts the type.

See what you said:

  

I have tested, and returns the number: console.log ("Irem1:" + i_rem); Printing   in the console: Irem1: "3"

Note that the value received is a number in double quotation marks: "3" .

In this, the quotation marks invalidate the number, making it NaN .

Even a letter within a parseInt returns type number , see:

var numero = parseInt("a");
console.log(numero);
console.log(typeof(numero));

It seems that the array generated by code arrayCods = lista.split(","); is returning values with double quotation marks, and therefore it generates NaN.

The solution is to remove the quotation marks 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 get 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">
    
28.05.2018 / 02:33