【问题标题】:Object has no method 'indexOf'对象没有方法'indexOf'
【发布时间】:2012-04-12 23:34:26
【问题描述】:

我有以下函数(取自Elevation Service @ Google Maps API),当我单击我用Google Maps JavaScript API v3 创建的地图上的某个位置时,它会输出例如63.00425720214844

function getElevation(event) {
    var locations = [];
    var clickedLocation = event.latLng;
    locations.push(clickedLocation);

    var positionalRequest = {
        'locations': locations
    }

    elevator.getElevationForLocations(positionalRequest, function(results, status) {
        if(status == google.maps.ElevationStatus.OK) {
            var s = results[0].elevation
            if(results[0]) {
                alert(s.substring(0, s.indexOf('.') - 1));
            } else {
                alert('Inget resultat hittades');
            }
        } else {
            alert('Det gick inte att hitta höjdskillnaden på grund av följande: ' + status);
        }
    });
}

我想删除点之后的所有内容,包括点,例如从63.00425720214844 中删除.00425720214844,但是当我单击地图上的某个位置时,我在控制台中收到此错误消息:Uncaught TypeError: Object 63.00425720214844 has no method 'indexOf'

我做错了什么?

提前致谢。

【问题讨论】:

  • 我不知道它打印63.00425720214844
  • 我已经阅读了这个问题和答案。
  • 顺便说一句,您可能会考虑将 s = ... 赋值向下移动 1 行,否则您在访问它之后会检查 results[0]。
  • console.log(typeof s)console.dir(s) 告诉你什么?

标签: javascript indexof


【解决方案1】:

变量s 不包含字符串。

你可以把它变成一个字符串:

s = s.toString();

如果是数字,你可以只使用数字函数:

alert(Math.floor(s));

【讨论】:

  • 谢谢,但马克的回答要简单得多:)
  • 如果是数字,也可以使用s.toFixed(0)
  • @ErikEdgren:以何种方式更简单?因为parseIntMath.floor 少两个字符...?
  • @Guffa:因为它只有一个字 :) Math.floor 也很简单
  • @ErikEdgren:实际上Math.floor(s)parseInt(s.toString()) 更简单,这才是它真正应该读的...
【解决方案2】:

只需执行 javascript parseInt(63.00425720214844) 即可获得 63。

【讨论】:

  • 非常感谢 - 它成功了! :D 我会尽快接受你的回答。
猜你喜欢
  • 2014-06-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-29
  • 2010-11-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多