Array.prototype.toLocaleString()
Метод toLocaleString()
повертає рядок, що відображає елементи масиву. Елементи перетворюються у рядки, використовуючи свої методи toLocaleString
, і ці рядки розділяються символами, що відповідають локалі (наприклад, комою “,”).
The source for this interactive example is stored in a GitHub repository. If you'd like to contribute to the interactive examples project, please clone https://github.com/mdn/interactive-examples and send us a pull request.
Синтаксис
arr.toLocaleString([locales[, options]]);
Параметри
locales
Optional- Рядок з міткою мови BCP 47 або масив таких рядків. Щодо загального вигляду та інтерпретації аргументу
locales
дивітьсяIntl
. options
Optional- Об'єкт з властивостями конфігурації, для числових значень дивіться
Number.prototype.toLocaleString()
, а для датDate.prototype.toLocaleString()
.
Значення, що повертається
Текстовий рядок, що відображає елементи масиву.
Приклади
Використання locales
та options
Елементи масиву перетворюються на рядки, використовуючи свої методи toLocaleString
.
Object
:Object.prototype.toLocaleString()
Number
:Number.prototype.toLocaleString()
Date
:Date.prototype.toLocaleString()
Завжди відображати знак валюти для рядків та чисел у масиві prices
:
var prices = ['¥7', 500, 8123, 12];
prices.toLocaleString('ja-JP', { style: 'currency', currency: 'JPY' });
// "¥7,¥500,¥8,123,¥12"
Більше прикладів дивіться на сторінках Intl
, NumberFormat
та DateTimeFormat
.
Поліфіл
// https://tc39.github.io/ecma402/#sup-array.prototype.tolocalestring
if (!Array.prototype.toLocaleString) {
Object.defineProperty(Array.prototype, 'toLocaleString', {
value: function(locales, options) {
// 1. Нехай O дорівнює ? ToObject(this value).
if (this == null) {
throw new TypeError('"this" is null or not defined');
}
var a = Object(this);
// 2. Нехай len дорівнює ? ToLength(? Get(A, "length")).
var len = a.length >>> 0;
// 3. Нехай separator дорівнює рядковому значенню
// роздільника елементів списку згідно поточної
// локалі середовища виконання (це значення
// визначається реалізацією).
// ЗАУВАГА: В даному випадку ми використовуємо кому
var separator = ',';
// 4. Якщо len дорівнює нулю, повернути порожінй рядок.
if (len === 0) {
return '';
}
// 5. Нехай firstElement дорівнює ? Get(A, "0").
var firstElement = a[0];
// 6. Якщо firstElement дорівнює undefined або null, тоді
// a. Нехай R дорівнює порожньому рядку.
// 7. Інакше,
// a. Нехай R дорівнює ?
// ToString(?
// Invoke(
// firstElement,
// "toLocaleString",
// « locales, options »
// )
// )
var r = firstElement == null ?
'' : firstElement.toLocaleString(locales, options);
// 8. Нехай k дорівнює 1.
var k = 1;
// 9. Повторювати, доки k < len
while (k < len) {
// а. Нехай S дорівнює рядковому значенню, утвореному
// об'єднанням R та separator.
var s = r + separator;
// б. Нехай nextElement дорівнює ? Get(A, ToString(k)).
var nextElement = a[k];
// в. Якщо nextElement дорівнює undefined або null, тоді
// i. Нехай R дорівнє порожньому рядку.
// г. Інакше,
// i. Нехай R дорівнює ?
// ToString(?
// Invoke(
// nextElement,
// "toLocaleString",
// « locales, options »
// )
// )
r = nextElement == null ?
'' : nextElement.toLocaleString(locales, options);
// ґ. Нехай R дорівнює рядковому значенню, утвореному
// об'єднанням S та R.
r = s + r;
// д. Збільшити k на 1.
k++;
}
// 10. Повернути R.
return r;
}
});
}
Якщо вам потрібно підтримувати зовсім застарілі рушії JavaScript, які не підтримують Object.defineProperty
, краще взагалі не використовувати поліфіли методів Array.prototype
, оскільки ви не зможете зробити їх не перелічуваними.
Специфікації
Специфікація | Статус | Коментар |
---|---|---|
ECMAScript (ECMA-262) The definition of 'Array.prototype.toLocaleString' in that specification. |
Living Standard | Початкове визначення було надане у ECMAScript 3. |
ECMAScript Internationalization API (ECMA-402) The definition of 'Array.prototype.toLocaleString' in that specification. |
Living Standard | Це визначення замінює визначення, надане у ECMA-262. |
Сумісність з веб-переглядачами
BCD tables only load in the browser