Foro de elhacker.net

Programación => Desarrollo Web => Mensaje iniciado por: Leguim en 13 Septiembre 2020, 22:32 pm



Título: Pregunta: ¿Como pasar '27' a 27? (javascript)
Publicado por: Leguim en 13 Septiembre 2020, 22:32 pm
Estoy teniendo problemas, quiero validar del lado del cliente si un valor ingresado es un numero y si ese numero es un entero pero está este problema.

digamos que el dato es '27' o "27",
las función que uso dirá que esto no es un entero, probé y la función que uso para saber si es un numero si funciona pero para saber si es un entero no funciona.

Código
  1. var value = '27';
  2.  
  3. if(!is_NaN(value)) // si es un numero
  4. {
  5.      if(Number.isInteger(value)) // si es un entero (acá me vienen los problemas porque me devuelve false cuando todos sabemos que 27 si es un entero.
  6.      {
  7.               // [...]
  8.      }
  9. }
  10.  

La solución que se me ocurre es ver si existe una función que convierta el "27" a 27 (int) con javascript.


Título: Re: Pregunta: ¿Como pasar '27' a 27? (javascript)
Publicado por: EdePC en 13 Septiembre 2020, 23:33 pm
Number.isInteger(value) comprueba que value sea del tipo Integer

Para hacer la conversión de tipos rápida puedes usar:

Código
  1. var value = '27';
  2.  
  3. if(!is_NaN(value)) // si es un numero
  4. {
  5.      if(Number.isInteger(+value))
  6.      {
  7.               // [...]
  8.      }
  9. }

- Nótese el + delante de value


Título: Re: Pregunta: ¿Como pasar '27' a 27? (javascript)
Publicado por: Leguim en 14 Septiembre 2020, 01:20 am
Gracias! En un tema pasado me habían explicado eso del + (creo que fuiste vos) me había olvidado... Gracias!


Título: Re: Pregunta: ¿Como pasar '27' a 27? (javascript)
Publicado por: @XSStringManolo en 14 Septiembre 2020, 01:24 am
'27' es un string de tipo primitivo.
"27" es un string de tipo primitivo.
"27".toString() es un string de tipo primitivo que de forma interna se convierte a tipo referenciado con autoboxing. Es decir para aplicarle el método, se convierte en un tipo referenciado/objeto String tal que puedes hacer manualmente con el constructor new String(27);

Esto mismo se aplica a los números. Puedes tener el tipo primitivo 27, el tipo referenciado Number(27), muy similar a +" 27" creado por type cohercion y también tienes el parseInt("27") que tiene algunas diferencias.

Para convertir a número entero, debes definir primero lo que es un numero entero. Porque puede ser un número entero matemáticamente. Puede ser un tipo entero que es una implementación concreta y especifíca de un lenguaje de programación sobre el concepto matemático con un tamaño de bytes predefinido, etc.

También debes considerar como javascript trabaja con objetos para almacenar valores.
Es { numero: 27 } un entero, un entero dentro de un objeto, una propiedad numérica dentro de un objeto?
Es [27] un entero? Es un array? Es un entero dentro de un array?
Es Number(27) un entero? Un objeto? Un entero dentro de un objeto?
Es window.miNumero = 27 un entero? Un objeto? Una propiedad? Una variable?
Es /27/ un entero? Un objeto? Una expresión regular?
Es /d+/ un entero? Un trozo de un entero? Un objeto? Una expresión regular?
Es 27.5212 un entero sin truncar? Un entero sin aproximar? Un flotante?

Concluyendo, qué quieres detectar tú? Porque en base a tus necesidades/objetivos, tu concepción de lo que es un entero, la solución va a diferir.