Javascript engine V8 использует ICU для форматирования валюты (и другой локали).
И ICU использует CLDR. В cldr у нас есть список определенных альтернативных имен здесь .
Поэтому, когда мы устанавливаем локаль как US (en_US
), и нам нужны доллары, тогда символом является $. Но для одной и той же локали мы можем получить разные доллары, поэтому, чтобы различить ее, CDLR возвращает разные символы. То же самое будет, если вы установите для локали en_CA
и для валюты CAD
, тогда мы получим символ $
, потому что канадцы называют канадские доллары долларами (здесь нет ничего удивительного :)) А для locale = 'en-CA', currency = 'USD'
мы получили бы 1,00 долл. США .
В CLDR есть несколько альтернативных символов доллара (AUD - A $, BRL - R $ и несколько других).
Также, если мы проверим документацию для Intl.NumberFormat
Параметры currencyDisplay могут быть symbol
, code
или name
. Если вы передаете code
, вы получаете CAD 1.00
, а если вы передаете symbol
, вы получаете CA$ 1.00
.
TLDR; Js использует ICU, который использует CDLR, который возвращает CA$
для вашего случая.