predefinidas manejo funciones caracter cadenas cadena buscar javascript function indexof

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);

Prueba aqui

Solucion 2

usa toString() para convertir a una string

document.getElementById("oset").innerHTML = timeD2C(timeofday.toString());

jsfiddle con 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