[JS] "a.charAt is not a function", ¿por qué?

Iniciado por Linton, 3 Septiembre 2013, 21:35 PM

0 Miembros y 1 Visitante están viendo este tema.

Linton

Hola, a ver si podéis iluminarme. Llevo trabajando desde las 6.30 de la mañana y ya no doy pie con bola.

He cogido hace un rato este problemilla: dar la parte entera de un número con decimales. Mi intento:

Código (javascript) [Seleccionar]
function digit(a){

var num = a;
var cifra='';
var cont=0;

while(num>1){
  num=num/10;
  cont++;
}
print(a + ' tiene ' + cont + ' enteros');

for(var i=0; i<cont; i++){
  cifra = cifra + a.charAt(i);
}
print('La parte entera de ' + a + ' es ' + cifra);
}

digit(...)


Pues no me admite la propiedad charAt, me sale este aviso: "Exception: TypeError: a.charAt is not a function in function digit".

Sin embargo el mismo código funciona cuando en vez de una función hago un simple script para números cogidos mediante prompt:

Código (javascript) [Seleccionar]
var a = prompt('Escribe un número con decimales');
var num = a;

var cifra='';
var cont=0;
while(num>1){
  num=num/10;
  cont++;
}
print(a + ' tiene ' + cont + ' enteros');

for(var i=0; i<cont; i++){
  cifra = cifra + a.charAt(i);
}

print('La parte entera de ' + a + ' es ' + cifra);
 


¿Dónde está el fallo? Gracias, un saludo.

EFEX

GITHUB 

Eleкtro

#2
Cita de: Linton en  3 Septiembre 2013, 21:35 PM¿Dónde está el fallo?

No manejo javascript pero la función charAt es para Strings, no para valores numéricos, imagino que por eso el prompt te funciona ya que devolverá un string.

EDITO: No sé si esta concatenación de métodos funcionará, como ya digo no manejo JS, pero ya captas la idea:
a.tostring.charAt(i)

PD: Solo hay que fijarse un poco más en las cosas, la propia función se llama "charAt", no "digitAt", y un valor numérico contiene dígitos, no caracteres.

Saludos








#!drvy

Como te ha dicho EleKtro, charAt espera un string, no un numero. Esa facil comprobacion la puedes hacer al ejecutar

Código (javascript) [Seleccionar]
12345.chartAt(2);

Veras como te dice ILLEGAL token.

Código (javascript) [Seleccionar]
cifra = cifra + a.toString().charAt(i);

Saludos

Linton

Anoche después de apagar el ordenador caí en la cuenta de dónde estaba el fallo. ¡Muchas gracias a los tres por la confirmación!  :) :)

1mpuls0

Cita de: Linton en  4 Septiembre 2013, 08:12 AM
Anoche después de apagar el ordenador caí en la cuenta de dónde estaba el fallo. ¡Muchas gracias a los tres por la confirmación!  :) :)

y te quedaste con el placer de la duda?, en lo personal en ese momento habría encendido el pc y corregido el error  :xD

por cierto lo mismo pasa con substring() y length que posiblemente podría pensarse que aplican para un valor numérico.
abc

Linton

Uf ya casi ni veía, llevaba 15 horas seguidas con el ordenador y dejé las ansias personales para la jornada siguiente  ;D

Muchas gracias por el dato, un saludo.