toLocaleString () не поддерживается во всех браузерах? [дубликат]

этот вопрос уже есть ответ здесь:

у меня есть эта простая функция:

Chrome, Firefox, IE:

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

Опера, Макстон:

Number(1000000).toLocaleString()
"1000000"

почему Opera и Maxthon не могут отформатировать? они поддерживают этот метод, но не исполнять это правильно?

есть toLocaleString() замена?

2 ответов


на язык спецификаций оставляет определение очень открытые:

15.7.4.3 Number.prototype.toLocaleString()

создает строковое значение, представляющее это числовое значение, отформатированное в соответствии с соглашениями текущей локали среды узла. эта функция зависит от реализации, и допустимо, но не рекомендуется, чтобы она возвращала то же самое, что и toString.

различные браузеры могут реализуйте его по-разному и можете реализовать его по-разному в зависимости от выбранной пользователем локали.


на выходе также будет отличаться в зависимости от настроек локали пользователя, даже если 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"