Uncaught TypeError:.indexOf не является функцией

Я новичок в JavaScript, и я получаю ошибку, как показано ниже.

Uncaught TypeError: time.indexOf не является функцией

Ну, я действительно думал, что indexOf() действительно является функцией. Вот фрагмент моего кода:

    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>

Ответ 1

В основном indexOf() метод принадлежит строке (объект массива также), но при вызове функции вы передаете число, попробуйте передать его в строку и передать ее.

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

Ответ 2

Преобразовать timeofday в строку для использования 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);

Проверить здесь

Решение 2

используйте toString() для преобразования в string

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

jsfiddle with toString()

Ответ 3

Недавно я воспользовался этой ошибкой, используя библиотеку javascript, которая изменяет параметры функции на основе условий.

Вы можете проверить объект, чтобы узнать, есть ли у него функция. Я бы сделал это только в сценариях, где вы не контролируете, что вам передается.

if( param.indexOf != undefined ) {
   // we have a string or other object that 
   // happens to have a function named indexOf
}

Вы можете проверить это в консоли своего браузера:

> (3).indexOf == undefined;
true

> "".indexOf == undefined;
false