javascript - manejo - No se detectó TypeError:.indexOf no es una función
split javascript (3)
Soy nuevo en JavaScript y me aparece un error como se muestra a continuación.
No se detectó TypeError: time.indexOf no es una función
Vaya, realmente pensé que indexOf () realmente era una función. Aquí hay un fragmento de mi código:
var timeofday = new Date().getHours() + (new Date().getMinutes()) / 60;
document.getElementById("oset").innerHTML = timeD2C(timeofday);
</script>
<script>
function timeD2C(time) { // Converts 11.5 (decimal) to 11:30 (colon)
var pos = time.indexOf(''.'');
var hrs = time.substr(1, pos - 1);
var min = (time.substr(pos, 2)) * 60;
if (hrs > 11) {
hrs = (hrs - 12) + ":" + min + " PM";
} else {
hrs += ":" + min + " AM";
}
return hrs;
}
</script>
Básicamente, indexOf()
es un método que pertenece a la cadena (también al objeto de matriz), pero al llamar a la función le está pasando un número, intente convertirlo en una cadena y páselo.
document.getElementById("oset").innerHTML = timeD2C(timeofday + "");
var timeofday = new Date().getHours() + (new Date().getMinutes()) / 60;
function timeD2C(time) { // Converts 11.5 (decimal) to 11:30 (colon)
var pos = time.indexOf(''.'');
var hrs = time.substr(1, pos - 1);
var min = (time.substr(pos, 2)) * 60;
if (hrs > 11) {
hrs = (hrs - 12) + ":" + min + " PM";
} else {
hrs += ":" + min + " AM";
}
return hrs;
}
alert(timeD2C(timeofday+""));
Y es bueno hacer la conversión de cadena dentro de la definición de su función,
function timeD2C(time) {
time = time + "";
var pos = time.indexOf(''.'');
Para que el flujo de código no se interrumpa en momentos en que los desarrolladores se olviden de pasar una cadena a esta función.
Convertir timeofday a string para usar indexOf
var timeofday = new Date().getHours() + (new Date().getMinutes()) / 60;
console.log(typeof(timeofday)) // for testing will log number
function timeD2C(time) { // Converts 11.5 (decimal) to 11:30 (colon)
var pos = time.indexOf(''.'');
var hrs = time.substr(1, pos - 1);
var min = (time.substr(pos, 2)) * 60;
if (hrs > 11) {
hrs = (hrs - 12) + ":" + min + " PM";
} else {
hrs += ":" + min + " AM";
}
return hrs;
}
// "" for typecasting to string
document.getElementById("oset").innerHTML = timeD2C(""+timeofday);
Solucion 2
usa toString()
para convertir a una string
document.getElementById("oset").innerHTML = timeD2C(timeofday.toString());
Me encontré con este error recientemente utilizando una biblioteca javascript que cambia los parámetros de una función según las condiciones.
Puedes probar un objeto para ver si tiene la función. Solo haría esto en situaciones en las que no controlas lo que se te pasa.
if( param.indexOf != undefined ) {
// we have a string or other object that
// happens to have a function named indexOf
}
Puedes probar esto en la consola de tu navegador:
> (3).indexOf == undefined;
true
> "".indexOf == undefined;
false