1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
|
---
title: Number.prototype.toLocaleString()
slug: Web/JavaScript/Reference/Global_Objects/Number/toLocaleString
tags:
- JavaScript
- 原型
- 国际化
- 数字
- 方法
translation_of: Web/JavaScript/Reference/Global_Objects/Number/toLocaleString
---
<div>{{JSRef("Global_Objects", "Number")}}</div>
<p><code><strong>toLocaleString()</strong></code> 方法返回这个数字在特定语言环境下的表示字符串。</p>
<p>新的 <code>locales</code> 和 <code>options</code> 参数让应用程序可以指定要进行格式转换的语言,并且定制函数的行为。在旧的实现中,会忽略 <code>locales</code> 和 <code>options</code> 参数,使用的语言环境和返回的字符串的形式完全取决于实现方式。</p>
<h2 id="语法">语法</h2>
<pre class="syntaxbox"><code><em>numObj</em>.toLocaleString(</code><code>[locales [, options]])</code></pre>
<h3 id="参数">参数</h3>
<p>查阅<a href="#Browser_Compatibility">浏览器兼容性</a>部分,了解哪些浏览器支持 <code>locales</code> 和 <code>options</code> 参数,通过<a href="#Checking_for_support_for_locales_and_options_arguments">示例: 检查 <code>locales</code> 和 <code>options</code> 参数的支持</a>了解特征检测。</p>
<div class="note">
<p><strong>注意:</strong> ECMAScript 国际化 API,在 Firefox 29 中得以实施,增加了 <code>locales</code> 参数的 <a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/toLocaleString"><code>Number.toLocaleString</code></a> 方法。如果参数为 <code>undefined</code>,此方法返回本地操作系统指定的位数,而 Firefox 的早期版本中返回<a href="https://en.wikipedia.org/wiki/Arabic_numerals">阿拉伯语</a>数字。这一变化已被报告为向后影响的兼容性问题并可能会被尽快修复。({{ bug(999003) }})</p>
</div>
<div>{{page('/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/NumberFormat', '参数')}}</div>
<h3 id="返回值">返回值</h3>
<p>返回一个语言环境下的表示字符串。</p>
<h2 id="示例">示例</h2>
<h3 id="使用_toLocaleString">使用 <code>toLocaleString</code></h3>
<p>在没有指定区域的基本使用时,返回使用默认的语言环境和默认选项格式化的字符串。</p>
<pre class="brush: js">var number = 3500;
console.log(number.toLocaleString()); // Displays "3,500" if in U.S. English locale
</pre>
<h3 id="检查_locales_和_options_参数的支持">检查 <code>locales</code> 和 <code>options</code> 参数的支持</h3>
<p><code>locales</code> 和 <code>options</code> 参数目前还不是所有浏览器都支持的。在 ES5.1 和更新的实现中检查支持情况,可以依靠使用非法参数时规定抛出的 {{jsxref("Global_Objects/RangeError", "RangeError")}} 异常:</p>
<pre class="brush: js">function toLocaleStringSupportsLocales() {
var number = 0;
try {
number.toLocaleString('i');
} catch (e) {
return e.name === 'RangeError';
}
return false;
}
</pre>
<p>早于 ES5.1 的实现中,如果带参数调用 <code>toLocaleString</code> 并不会抛出范围异常。</p>
<p>在所有宿主环境下,包括那些支持比 ed 5.1 还早的 ECMA-262 的环境,都能有效检测的方法是直接检测 ECMA-402 中的其它特性,它指定 <code>Number.prototype.toLocaleString</code> 需要支持地区选项:</p>
<pre class="brush: js">function toLocaleStringSupportsOptions() {
return !!(typeof Intl == 'object' && Intl && typeof Intl.NumberFormat == 'function');
}
</pre>
<p>它测试全局的 <code>Intl</code> 对象,检测它不是 <code>null</code> 并且有 <code>NumberFormat</code> 的方法。</p>
<h3 id="使用_locales">使用 <code>locales</code></h3>
<p>这个示例展示了不同地区数字格式的差异。为了设置你的应用程序界面下使用的语言格式,请确保使用 <code>locales</code> 参数指定了使用的语言(可能还有一些备用语言):</p>
<pre class="brush: js">var number = 123456.789;
// 德国使用逗号作为小数分隔符,分位周期为千位
console.log(number.toLocaleString('de-DE'));
// → 123.456,789
// 在大多数阿拉伯语国家使用<a href="https://en.wikipedia.org/wiki/Eastern_Arabic_numerals">阿拉伯语</a>数字
console.log(number.toLocaleString('ar-EG'));
// → ١٢٣٤٥٦٫٧٨٩
// 印度使用千位/拉克(十万)/克若尔(千万)分隔
console.log(number.toLocaleString('en-IN'));
// → 1,23,456.789
// nu 扩展字段要求编号系统,e.g. 中文十进制
console.log(number.toLocaleString('zh-Hans-CN-u-nu-hanidec'));
// → 一二三,四五六.七八九
// 当请求不支持的语言时,例如巴厘语,加入一个备用语言,比如印尼语
console.log(number.toLocaleString(['ban', 'id']));
// → 123.456,789
</pre>
<h3 id="使用_options">使用 <code>options</code></h3>
<p>通过 <code>toLocaleString</code> 返回的结果可以通过 <code>options</code> 参数进行定制:</p>
<pre class="brush: js">var number = 123456.789;
// 要求货币格式
console.log(number.toLocaleString('de-DE', { style: 'currency', currency: 'EUR' }));
// → 123.456,79 €
// 日元不使用小数位
console.log(number.toLocaleString('ja-JP', { style: 'currency', currency: 'JPY' }))
// → ¥123,457
// 限制三位有效数字
console.log(number.toLocaleString('en-IN', { maximumSignificantDigits: 3 }));
// → 1,23,000
</pre>
<h2 id="性能">性能</h2>
<p>当格式化大量数字时,最好建立一个 {{jsxref("Global_Objects/NumberFormat", "NumberFormat")}} 对象并且使用它提供的 {{jsxref("NumberFormat.format")}} 方法。</p>
<h2 id="规范">规范</h2>
<table class="standard-table">
<tbody>
<tr>
<th scope="col">规范</th>
<th scope="col">状态</th>
<th scope="col">注解</th>
</tr>
<tr>
<td>ECMAScript 3rd Edition. Implemented in JavaScript 1.5</td>
<td>Standard</td>
<td>Initial definition.</td>
</tr>
<tr>
<td>{{SpecName('ES5.1', '#sec-15.7.4.3', 'Number.prototype.toLocaleString')}}</td>
<td>{{Spec2('ES5.1')}}</td>
<td> </td>
</tr>
<tr>
<td>{{SpecName('ES6', '#sec-number.prototype.tolocalestring', 'Number.prototype.toLocaleString')}}</td>
<td>{{Spec2('ES6')}}</td>
<td> </td>
</tr>
<tr>
<td><a href="http://www.ecma-international.org/ecma-402/1.0/#sec-13.2.1">ECMAScript Internationalization API Specification, 1<sup>st</sup> Edition (ECMA-402)</a></td>
<td>Standard</td>
<td> </td>
</tr>
</tbody>
</table>
<h2 id="浏览器兼容性">浏览器兼容性</h2>
<p>{{Compat("javascript.builtins.Number.toLocaleString")}}</p>
<div> </div>
<h2 id="相关链接">相关链接</h2>
<ul>
<li>{{jsxref("Number.prototype.toString()")}}</li>
</ul>
|