未捕获的TypeError:.indexOf不是函数

时间:2016-04-07 17:22:22

标签: javascript function indexof

我是JavaScript新手,我收到错误,如下所示。

  

未捕获的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>

4 个答案:

答案 0 :(得分:17)

基本上indexOf()是一个属于字符串的方法(也是数组对象),但是在调用函数时,你要传递一个数字,尝试将它转换为字符串并传递它。

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

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

最好在函数定义中进行字符串转换,

function timeD2C(time) { 
  time = time + "";
  var pos = time.indexOf('.');

因此,当开发人员忘记将字符串传递给此函数时,代码流不会中断。

答案 1 :(得分:5)

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

Test Here

解决方案2

使用toString()转换为string

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

jsfiddle with toString()

答案 2 :(得分:1)

我遇到e.data.indexOf is not a function错误,在调试之后,我发现它实际上是一个TypeError,这意味着indexOf()是一个函数,适用于字符串,因此我对数据,如下所示,然后使用indexOf()方法使其正常工作

e.data.toString().indexOf('<stringToBeMatchedToPosition>')

不确定我的答案是否正确,但是是的,因为我遇到类似的情况,我也同意我的看法。

答案 3 :(得分:0)

我最近使用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