Replace()产生“;未捕获的类型错误:未定义的不是函数“;当与零一起使用时

Replace() yields "Uncaught TypeError: undefined is not a function" when used with zero

本文关键字:函数 一起 错误 产生 Replace 类型 未定义      更新时间:2023-09-26

我从MongoDb中获取数字,通过使用replace()方法删除任何空格或逗号(如果存在),将其解析为我的格式。虽然这已经完美地工作了一段时间,但我刚刚发现,当值为零时,它会产生以下错误

Uncaught TypeError: undefined is not a function

包含被质疑方法的代码片段如下:

function Query_Member_points_credits_summaryExecute() 
{
    var Balance = Apperyio.storage.MS_Member_Points_Credits_Summary.get("$['Balance']");
    var balance = parseFloat(Balance.replace(',', '').replace(' ', ''));
    console.log("balance " + balance);
    var threshold = parseFloat(50000);
    console.log("threshold " + threshold);
}

第二行引起的错误。

调查尝试次数:

  1. 我将行替换为以下内容:
    a.var balance = parseFloat(Balance.replace(',', ''));
    b.var balance = parseFloat(Balance.replace(' ', ''));
    c.var balance = Balance.replace(',', '').replace(' ', '');

  2. 只有这一点适用于balance = 0:
    var balance = parseFloat(Balance);

  3. 使用除零以外的数字,包括0.000001,运行良好

我很困惑

的原因是什么

我首先建议,在之后

var Balance = Apperyio.storage.MS_Member_Points_Credits_Summary.get("$['Balance']");

输入一些调试代码来告诉你Balance实际上是什么,类似于:

alert(typeof(Balance));

根据您的错误消息,可能是undefined。如果是这种情况,那么您将需要找出appery.io为什么给您一个未定义的零值。

如果它是而不是未定义的,那么它可能是某种奇怪的类型(即,不是字符串),这可能会影响replace调用的管道。

如果appery.io给你一个number类型表示零,string类型表示非零(根据你的评论),那么快速的"致命修复"可能类似于:

// Ensure number made string before replace.
var balance = parseFloat((""+Balance).replace(',', '').replace(' ', ''));

然后我会联系他们,询问这是否是他们的错误。