Javascript 该功能在IE7中失败,但在所有现代浏览器中都可以使用。怎么能修好呢?

Javascript 该功能在IE7中失败,但在所有现代浏览器中都可以使用。怎么能修好呢?,javascript,function,internet-explorer-7,Javascript,Function,Internet Explorer 7,我有这段JavaScript代码来格式化美元的数字,它在Stackoverflow上得到了很多赞誉。它在最新的web浏览器中运行良好,但在IE7中会导致JavaScript失败。我试图使用一个不需要JQuery的函数,因为此项目的其余部分没有使用它: function formatDollar(num) { var p = num.toFixed(2).split("."); return "$" + p[0].split("").reverse().reduce(func

我有这段JavaScript代码来格式化美元的数字,它在Stackoverflow上得到了很多赞誉。它在最新的web浏览器中运行良好,但在IE7中会导致JavaScript失败。我试图使用一个不需要JQuery的函数,因为此项目的其余部分没有使用它:

 function formatDollar(num) {
     var p = num.toFixed(2).split(".");
     return "$" + p[0].split("").reverse().reduce(function(acc, num, i, orig) {
         return  num + (i && !(i % 3) ? "," : "") + acc;
     }, "") + "." + p[1];
 }
IE7对用户只是在页面上说错误。在IE7上的调试模式下,is抱怨它不是在单击行上提交的表单的预期对象。如果我删除了上面的函数,让它在不格式化的情况下传递数字,它将在IE7中工作。它还抱怨从第一次返回开始的线路。我已经从JavaScript中删除了所有其他内容,这个函数似乎是罪魁祸首。

reduce函数仅在JavaScript 1.8 ECMAScript 5及更高版本中可用,IE7没有实现。如果您尚未使用任何跨浏览器提供其功能的库,则可以通过以下方式实现:

if (!Array.prototype.reduce) {  
  Array.prototype.reduce = function reduce(accumulator){  
    if (this===null || this===undefined) throw new TypeError("Object is null or undefined");  
    var i = 0, l = this.length >> 0, curr;  

    if(typeof accumulator !== "function") // ES5 : "If IsCallable(callbackfn) is false, throw a TypeError exception."  
      throw new TypeError("First argument is not callable");  

    if(arguments.length < 2) {  
      if (l === 0) throw new TypeError("Array length is 0 and no second argument");  
      curr = this[0];  
      i = 1; // start accumulating at the second element  
    }  
    else  
      curr = arguments[1];  

    while (i < l) {  
      if(i in this) curr = accumulator.call(undefined, curr, this[i], i, this);  
      ++i;  
    }  

    return curr;  
  };  
}  
或者,如果您不介意不使用简化的reduce语法,只需在函数中用等效循环替换它,例如上面的while循环或for varient循环

reduce函数仅在JavaScript1.8ECMAScript 5及以上版本中可用,IE7没有实现。如果您尚未使用任何跨浏览器提供其功能的库,则可以通过以下方式实现:

if (!Array.prototype.reduce) {  
  Array.prototype.reduce = function reduce(accumulator){  
    if (this===null || this===undefined) throw new TypeError("Object is null or undefined");  
    var i = 0, l = this.length >> 0, curr;  

    if(typeof accumulator !== "function") // ES5 : "If IsCallable(callbackfn) is false, throw a TypeError exception."  
      throw new TypeError("First argument is not callable");  

    if(arguments.length < 2) {  
      if (l === 0) throw new TypeError("Array length is 0 and no second argument");  
      curr = this[0];  
      i = 1; // start accumulating at the second element  
    }  
    else  
      curr = arguments[1];  

    while (i < l) {  
      if(i in this) curr = accumulator.call(undefined, curr, this[i], i, this);  
      ++i;  
    }  

    return curr;  
  };  
}  
或者,如果您不介意不使用简化的reduce语法,只需在函数中用等效循环替换它,例如上面的while循环或for varient循环


谢谢我已经包含了这段代码以首先执行,它在IE7中工作得很好!它也适用于现代浏览器。谢谢!我已经包含了这段代码以首先执行,它在IE7中工作得很好!它在现代浏览器中也能工作。经过更广泛的测试,我相信这个函数有一个与IE7无关的bug。当它显示负美元金额(如-100.00)时,它显示为$-,100.0,而不是$-100.00。也许作者没有意识到需要显示的是负美元金额。虽然我不想使用JQuery,但是有没有更好的方法可以使用成熟的JQuery代码呢?谢谢我想这是一个讨论这个代码最初发布到的问题的问题。经过更广泛的测试,我相信这个函数有一个与IE7无关的bug。当它显示负美元金额(如-100.00)时,它显示为$-,100.0,而不是$-100.00。也许作者没有意识到需要显示的是负美元金额。虽然我不想使用JQuery,但是有没有更好的方法可以使用成熟的JQuery代码呢?谢谢我想这是关于这个代码最初发布到的问题的讨论。