为什么我会收到.replace不是函数的错误消息?

时间:2010-06-29 13:53:47

标签: javascript jquery function replace

我有这个功能:

function countLitreKgSums(cProductIds){
  var cLitreKgSums = new Array();
  var cWeek = 0;
  for(i=0;i<cProductIds.length;i++){
    var cLitreKgSum = 0;
    $("#plan_table td[class='week']").each(function(){
            cWeek = $(this).html();
            var cLitreKgValue = $("input[name*='plan_table_week" + cWeek + "_prod" + cProductIds[i] + "_']").val();
            if (cLitreKgValue == "") {
                cLitreKgValue = 0;
            }
            cLitreKgValue = cLitreKgValue.replace(/,/g, '.').replace(/[^\d\.]/g, '').replace(/\s/g, '');
            cLitreKgValue = parseFloat(cLitreKgValue);
            cLitreKgSum += cLitreKgValue;
       });
       cLitreKgSum = Math.round(cLitreKgSum * 100) / 100;
       cLitreKgSums[i] = cLitreKgSum;
  }
  return cLitreKgSums;
  //console.log(cLitreKgSums);
}

我收到错误消息,即.replace不是一个函数,但在其他函数中它可以正常工作。有什么区别?

4 个答案:

答案 0 :(得分:20)

cLitreKgValue可能是您尝试在其上调用replace而非字符串的数字。在这种情况下,错误是正确的 - 数字没有replace方法。

答案 1 :(得分:14)

改变这个:

cLitreKgValue.replace(/,/g, '.')

("" + cLitreKgValue).replace(/,/g, '.')

答案 2 :(得分:5)

你可以使用函数String()
即;字符串(cLitreKgValue).replace ....
字符串功能:
http://www.w3schools.com/jsref/jsref_string.asp

答案 3 :(得分:3)

虽然其他答案有效(并且正确,数字没有.replace(),但它是String method),我认为整体结构更改更好,如下所示:

$("#plan_table td[class='week']").each(function(){
    cWeek = $(this).html();
    var cLitreKgValue = $("input[name*='plan_table_week" + cWeek + "_prod" + cProductIds[i] + "_']").val();
    if (cLitreKgValue !== "") {
      cLitreKgValue = cLitreKgValue.replace(/,/g, '.').replace(/[^\d\.]/g, '').replace(/\s/g, '');
      cLitreKgSum += parseFloat(cLitreKgValue);
    }
});

当您知道0并且不会影响结果时,没有理由做所有工作,所以如果""表示0anything += 0没有网络效果,只是跳过它:)