Array.prototype.toLocaleString()

Метод toLocaleString() повертає рядок, що відображає елементи масиву. Елементи перетворюються у рядки, використовуючи свої методи toLocaleString, і ці рядки розділяються символами, що відповідають локалі (наприклад, комою “,”).

Синтаксис

arr.toLocaleString([locales[, options]]);

Параметри

locales Optional
Рядок з міткою мови BCP 47 або масив таких рядків. Щодо загального вигляду та інтерпретації аргументу locales дивіться  Intl.
options Optional
Об'єкт з властивостями конфігурації, для числових значень дивіться Number.prototype.toLocaleString(), а для дат Date.prototype.toLocaleString().

Значення, що повертається

Текстовий рядок, що відображає елементи масиву.

Приклади

Використання locales та options

Елементи масиву перетворюються на рядки, використовуючи свої методи 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 Latest Draft (ECMA-262)
The definition of 'Array.prototype.toLocaleString' in that specification.
Draft Початкове визначення було надане у ECMAScript 3.
ECMAScript Internationalization API 4.0 (ECMA-402)
The definition of 'Array.prototype.toLocaleString' in that specification.
Draft Це визначення замінює визначення, надане у ECMA-262.

Сумісність з веб-переглядачами

Update compatibility data on GitHub
DesktopMobileServer
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewChrome for AndroidFirefox for AndroidOpera for AndroidSafari on iOSSamsung InternetNode.js
toLocaleStringChrome Full support YesEdge Full support 12Firefox Full support 1IE Full support YesOpera Full support YesSafari Full support YesWebView Android Full support YesChrome Android Full support YesFirefox Android Full support 4Opera Android Full support YesSafari iOS Full support YesSamsung Internet Android Full support Yesnodejs Full support Yes
Optional locales parameterChrome ? Edge ? Firefox Full support 52IE ? Opera ? Safari ? WebView Android ? Chrome Android ? Firefox Android No support NoOpera Android ? Safari iOS ? Samsung Internet Android ? nodejs ?
Optional options parameterChrome ? Edge ? Firefox Full support 52IE ? Opera ? Safari ? WebView Android No support NoChrome Android ? Firefox Android No support NoOpera Android ? Safari iOS ? Samsung Internet Android ? nodejs ?

Legend

Full support  
Full support
No support  
No support
Compatibility unknown  
Compatibility unknown

Див. також