我使用toLocaleString
格式化英国工作薪水,传递货币选项,如下所示:
tempSalary = parseInt(salary).toLocaleString('en-gb', { style: 'currency', currency: 'GBP'});
我知道这在Safari中没有正确实现,但我可以提前检查输出其他内容吗?根据{{3}},我可以检查区域设置和选项参数吗?如果不支持,请不要打扰脚本?
我更愿意检查是否支持,而不仅仅是检查是否使用Safari(因为IE10-也没有完全支持它)。
答案 0 :(得分:5)
ECMA-402表示要支持 Number.prototype.toString 的选项,实现必须:
基于此,支持测试是:
if (typeof Intl == 'object' && typeof Intl.NumberFormat == 'function') {
// toLocaleString with options supported
} else {
// host dependent
}
作为一项功能:
function toLocaleStringSupportsOptions() {
return !!(typeof Intl == 'object' && Intl && typeof Intl.NumberFormat == 'function');
}
当然必须进行广泛的测试。它适用于我测试的几个更流行的浏览器,有些支持和不支持 Intl.NumberFormat 。
但是实现中可能存在错误。我能想到的唯一一个可能会发生的事情是,某些人可能无法返回 typeof 的预期值,即使他们被要求(例如,过去曾有浏览器返回' unknown& #39;而不是'对象'对象'而不是'功能')。此外,如果提供选项参数,则不需要ECMA-262 ed 3实现抛出错误,因此基于 try..catch 的检测可能会在这些主机中失败。
以下是一个更宽容的版本(但我会使用上述内容,直到我发现需要它的主机):
function toLocaleStringSupportsOptions() {
return !!(typeof Intl != 'undefined' && Intl && typeof Intl.NumberFormat != 'undefined');
}
答案 1 :(得分:1)
也许你可以像MDN建议的那样创建一个函数。并相应地处理错误。
function toLocaleStringSupportsLocales() {
var number = 0;
try {
number.toLocaleString('i');
} catch (e) {
return e.name === 'RangeError';
}
return false;
}