JAVASCRIPT - >为什么我收到错误消息“Uncaught TypeError:number not a function”?

时间:2012-05-06 10:10:45

标签: javascript google-maps-api-3

我想知道为什么我收到错误消息(Uncaught TypeError:number不是函数),这是我的代码:

<script type = "text/javascript">
  function dataparse(points)
   {
      points = points.substr(0, points.length - 1);
      var linar = points.split("\n");
      // Break each point by line break
      var wrkar = [];
      var pntar = [];
      for (var i = 0; i < linar.length; i++)
      {
          wrkar = linar[i].split(",", 2);
          // Break each point into x and y
          pntar.push(new google.maps.LatLng(parseFloat(wrkar[0]), parseFloat(wrkar[1])));
      }
      return pntar;
  }


  var cd = [
  (30.40545181622765, -9.582610613708539)
  (30.405229737948233, -9.577975756530805)
  (30.40300892737293, -9.577546603088422)
  (30.402268645956614, -9.584241396789594)
  ];

  var df = dataparse(cd);
  alert('df');

7 个答案:

答案 0 :(得分:4)

(30.40545181622765, -9.582610613708539)评估为-9.582610613708539

与下一行一起,它被解释为

-9.577975756530805(30.405229737948233, -9.577975756530805)

当然失败了因为-9.577...不是函数。

答案 1 :(得分:1)

  1. 您的dataparse函数需要一个字符串,给定points.substr(0,points.length - 1)
  2. 您将cd初始化为数组,但解析器尝试将(num1, num2) (num3, num4)作为函数执行(请参阅GGG的答案)。

答案 2 :(得分:0)

由于cd变量导致错误。你使用括号,但它不是正确的。 遵循dataparse方法cd变量应如下所示:

var cd = "30.40545181622765, -9.582610613708539\n"+
    "30.405229737948233, -9.577975756530805\n"+
    "30.40300892737293, -9.577546603088422\n"+
    "30.402268645956614, -9.584241396789594";

更新:但是,您可以用更好的形式重写代码:

function dataparse(points) {
    var pntar = [];
    for (var i = 0; i < points.length; i++) {
        pntar.push(new google.maps.LatLng(points[i][0], points[i][1]));
    }
    return pntar;
}

var cd = [
    [30.40545181622765, -9.582610613708539],
    [30.405229737948233, -9.577975756530805],
    [30.40300892737293, -9.577546603088422],
    [30.402268645956614, -9.584241396789594]
    ];

var df = dataparse(cd);
alert(df);

答案 3 :(得分:0)

你的点数组无效。您必须为点本身使用方括号并用逗号分隔它们

var cd = [
    [30.40545181622765, -9.582610613708539],
    [30.405229737948233, -9.577975756530805],
    [30.40300892737293, -9.577546603088422],
    [30.402268645956614, -9.584241396789594]
];

然后你还必须修改(简化)你的dataparse函数才能正确处理数组

function dataparse(points) {
    var i,
        length,
        pntar = [];

    for (i = 0, length = points.length; i < length; i++) {
        pntar.push(new google.maps.LatLng(points[i][0], points[i][1]));
    }

    return pntar;
}

答案 4 :(得分:0)

你得到这个,因为括号中的每个数字都被评估,你应该用你的函数接受的正确参数替换它...因为你使用的是substr,但实际上你想传递一个数组你应该在你的函数中添加一些代码:

function dataparse(pairs)
{
    for ( i=0; i < pairs.length ; i++ ) {
       var wrkar = pairs[i].split(", ",2);
       var pntar = [] ;
       pntar.push( new google.maps.LatLng(parseFloat(wrkar[0]), parseFloat(wrkar[1])) ); 
       return pntar;
    }    
}


var cd = [
        "30.40545181622765, -9.582610613708539",
        "30.405229737948233, -9.577975756530805",
        "30.40300892737293, -9.577546603088422",
        "30.402268645956614, -9.584241396789594"
];

var df = dataparse(cd);
alert('df');​

这是一个jsfiddle http://jsfiddle.net/ptQfc/

答案 5 :(得分:0)

第一次失误:

var cd = [
            (30.40545181622765, -9.582610613708539)
(30.405229737948233, -9.577975756530805)
(30.40300892737293, -9.577546603088422)
(30.402268645956614, -9.584241396789594)
];

Javascript数组必须用逗号分隔,而不是用换行符分隔!

答案 6 :(得分:0)

您误解了所需的语法,并且导致了大量错误,即尝试将变量解释为函数。

在Javascript中,var=[val,val2]构造创建一个数组。您试图将括号内容视为字符串,并将其拆分为。

存储阵列的更好方法是:

var cd = [
    [30.40545181622765, -9.582610613708539],
    [30.405229737948233, -9.577975756530805],
    [30.40300892737293, -9.577546603088422],
    [30.402268645956614, -9.584241396789594]
];

您的功能可以写成:

function dataparse(linar) {
    var wrkar = [] ;
    var pntar = [] ;
    for (var i = 0; i < linar.length; i++) {
        wrkar = linar[i];                // Break each point into x and y
        pntar.push( new google.maps.LatLng(parseFloat(wrkar[0]),parseFloat(wrkar[1]))); 
    }
    return pntar ;
}    

因为linar是一个数组数组,每次循环遍历数组时,它会将下一个数组设置为wrkar的值,从而为x和{{ 1}}坐标。