Javascript 该功能在IE7中失败,但在所有现代浏览器中都可以使用。怎么能修好呢?
我有这段JavaScript代码来格式化美元的数字,它在Stackoverflow上得到了很多赞誉。它在最新的web浏览器中运行良好,但在IE7中会导致JavaScript失败。我试图使用一个不需要JQuery的函数,因为此项目的其余部分没有使用它: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
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代码呢?谢谢我想这是关于这个代码最初发布到的问题的讨论。