在移动Safari浏览器的iOS 6奇怪的JavaScript行为(Strange JavaScri

2019-09-23 21:38发布

我跑进是在iOS 6的问题是在格式化给定值的价格的功能在移动Safari浏览器只复制一个非常非常非常奇怪的JS问题,通过剥离下来到2位小数的数量,并增加了对货币数的前面。 下面是功能。 我稍后会解释如何重现bug。

formatCurrency = function(value, currency, fixedPrecision, colourize, blankIfZero) {
    var text;

    if (blankIfZero && (Math.abs(value) < 0.01 || value === undefined)) {
         return "";
    }

    if (fixedPrecision) {
        text = currency + Math.abs(value).toFixed(2);
    } else {
        text = currency + roundTo2Decimals(Math.abs(value));
    }

    if (value < 0) {
        text = "-" + text;
    }

    if (colourize) {
        var colorClass = (value < 0 ? "negative" : "positive");
        text = "<span class='" + colorClass + "'>" + text + "</span>";
    }

    return text;
};

roundTo2Decimals = function(value) {
    var sign = value < 0 ? -1 : 1;
    return Math.round(Math.abs(value) * 100.0)/100.0 * sign;    
};

如果我一遍又一遍地运行的formatCurrency功能同样具有相同的值(例如一个的setInterval内)(可以说值= 1;和货币=“GBP”),你会发现每800-1000迭代一次由价值回归该函数包含一个负数:GBP1代替GBP1。 我没发现JS函数中的任何问题,这个问题很烦人。

管理我要解决这个问题......但我很好奇的是这个实现的问题。 [编辑:“ - ”从字符“roundTo2Decimals(Math.abs(值))”我通过删除固定的问题。 但“ - ”字符不应出现在首位。 因此,修复实际上是一个解决办法。]

我缺少的东西吗?

Answer 1:

我猜;

文本= “ - ” +字符串(文本);

是问题。

我也一直围绕冲浪了很多用于在Safari iOS6的相关的错误。 看来JS应该是更多的清洁剂,如果我们希望它运行流畅!



文章来源: Strange JavaScript behaviour on mobile Safari iOS 6