JAVASCRIPT --> 为什么我会收到错误消息“未捕获的类型错误:数字不是一个函数”

JAVASCRIPT --> Why do I get the error message "Uncaught TypeError: number is not a function "?

本文关键字:错误 数字 类型 函数 一个 为什么 消息 JAVASCRIPT      更新时间:2023-09-26

我想知道为什么我会收到错误消息(未捕获的类型错误:数字不是一个函数),这是我的代码:

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

(30.40545181622765, -9.582610613708539)计算结果为 -9.582610613708539

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

-9.577975756530805(30.405229737948233, -9.577975756530805)

这当然会失败,因为-9.577...不是一个函数。

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

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

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

你得到了这个,因为你括号中的每个数字都被计算了,你应该用你的函数接受的正确参数替换它......由于您使用的是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/

1st misake:

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

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

由于变量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);

你误解了所需的语法,它导致了一大堆错误,即试图将变量解释为函数。

在 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的值,这为您提供xy坐标。