并非所有浏览器都支持 toLocaleString()? [复制]

Posted

技术标签:

【中文标题】并非所有浏览器都支持 toLocaleString()? [复制]【英文标题】:toLocaleString() not supported in all browsers? [duplicate] 【发布时间】:2013-04-15 23:36:34 【问题描述】:

我有这个简单的功能:

Chrome、Firefox、IE:

Number(1000000).toLocaleString()
"1 000 000" // in french system, the space is the separator instead of the comma

Opera,傲游:

Number(1000000).toLocaleString()
"1000000"

为什么 Opera 和 Maxthon 不能格式化?他们支持这种方法,但没有以正确的方式执行?

有没有toLocaleString() 的替代品?

【问题讨论】:

只是指出您也不应该期望用户之间的统一输出Number(1000000).toLocaleString(); 给我"1,000,000"(Google Chrome,en-GB)。请参阅MDN page,了解它应该采用哪些参数以及支持哪些浏览器。 @PaulS。对不起,忘了准确地说我使用的是法语操作系统,在法语系统中,分隔是使用空格而不是逗号完成的 Chrome 中好像也没有!抱歉,因为我认为如果方法存在,则必须始终返回结果! 【参考方案1】:

language spec 的定义非常开放:

15.7.4.3Number.prototype.toLocaleString()

生成一个字符串值,该值表示根据宿主环境当前语言环境的约定格式化的数字值。 此函数依赖于实现,允许但不鼓励它返回与 toString 相同的内容

允许不同的浏览器以不同的方式实现它,并且可以根据用户选择的语言环境以不同的方式实现它。

【讨论】:

所以我没有直接替换?我必须对格式进行编程还是使用外部库? @AbdelouahabPp,如果您需要在所有浏览器上使用相同的数字格式,那么是的,您需要避免依赖于实现的函数。 啊,谢谢,希望他们能将其从该列表中删除;)【参考方案2】:

根据用户的区域设置,输出也会有所不同,即使他们的浏览器支持Number.prototype.toLocaleString,例如在 en-GB 上对我来说,Number(1000000).toLocaleString(); 给了我"1,000,000"

有没有toLocaleString() 的替代品?

为什么不写一个来做你想做的事呢?例如,

function localeString(x, sep, grp) 
    var sx = (''+x).split('.'), s = '', i, j;
    sep || (sep = ' '); // default seperator
    grp || grp === 0 || (grp = 3); // default grouping
    i = sx[0].length;
    while (i > grp) 
        j = i - grp;
        s = sep + sx[0].slice(j, i) + s;
        i = j;
    
    s = sx[0].slice(0, i) + s;
    sx[0] = s;
    return sx.join('.');

现在

localeString(1000000.00001);
// "1 000 000.00001"

【讨论】:

啊!这样就可以了!谢谢 因为我来自python,我认为这很简单,方法是反转它的字符串,然后重新反转它......但它会产生很多行!在python中,如果你想反转一个字符串,你只需做一个否定的步骤,"hello"[::-1],最新的元素是否定的,例如o将是"hello"[-1]真的世界很难来自python的人;) 再次感谢你 'abc'.split('').reverse().join('')'cba',但您仍然需要像这样循环遍历它。而是向下循环。此外,'abc'.slice(-1)'c' 啊!我应该学习更多关于 javascript 的课程,再次感谢你 :) 我无法理解这段代码,这是我可能不想自己编写解决方案的原因之一。

以上是关于并非所有浏览器都支持 toLocaleString()? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

toLocaleString 不适用于所有浏览器中小于 10000 的数字

toLocaleString 不适用于所有浏览器中小于 10000 的数字

Number.toLocalString() js

JavaScript手册 | JS Array 对象中的toLocaleString() 方法

音频文件在各浏览器上的兼容性

HTML5 Video(视频)