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
166
167
168
169
170
171
172
173
174
175
176
177
|
---
title: Array.prototype.toLocaleString()
slug: Web/JavaScript/Reference/Global_Objects/Array/toLocaleString
tags:
- Array
- JavaScript
- Method
translation_of: Web/JavaScript/Reference/Global_Objects/Array/toLocaleString
---
<div>{{JSRef("Global_Objects", "Array")}}</div>
<p><code><strong>toLocaleString()</strong></code> 返回一个字符串表示数组中的元素。数组中的元素将使用各自的 <code>toLocaleString</code> 方法转成字符串,这些字符串将使用一个特定语言环境的字符串(例如一个逗号 ",")隔开。</p>
<div>{{EmbedInteractiveExample("pages/js/array-tolocalestring.html")}}</div>
<h2 id="Syntax">语法</h2>
<pre class="syntaxbox"><code>arr.toLocaleString([locales[,options]]);</code></pre>
<h3 id="参数">参数</h3>
<dl>
<dt><code>locales</code> {{optional_inline}}</dt>
<dd>带有BCP 47语言标记的字符串或字符串数组,关于<code>locales</code>参数的形式与解释,请看{{jsxref("Intl")}}页面。</dd>
<dt><code>options</code> {{optional_inline}}</dt>
<dd>一个可配置属性的对象,对于数字 {{jsxref("Number.prototype.toLocaleString()")}},对于日期{{jsxref("Date.prototype.toLocaleString()")}}.</dd>
</dl>
<h3 id="返回值">返回值</h3>
<p>表示数组元素的字符串。</p>
<h2 id="示例">示例</h2>
<h3 id="使用locales和options">使用<code>locales</code>和<code>options</code></h3>
<p>数组中的元素将会使用各自的 toLocaleString 方法:</p>
<ul>
<li><code>Object</code>: {{jsxref("Object.prototype.toLocaleString()")}}</li>
<li><code>Number</code>: {{jsxref("Number.prototype.toLocaleString()")}}</li>
<li><code>Date</code>: {{jsxref("Date.prototype.toLocaleString()")}}</li>
</ul>
<p>总是在<code>prices</code>数组中显示字符串和数字的货币符号:</p>
<pre class="brush: js">var prices = ['¥7', 500, 8123, 12];
prices.toLocaleString('ja-JP', { style: 'currency', currency: 'JPY' });
// "¥7,¥500,¥8,123,¥12"</pre>
<p>更多实例请看 {{jsxref("Intl")}},{{jsxref("NumberFormat")}}和{{jsxref("DateTimeFormat")}}页面。</p>
<h2 id="Polyfill">Polyfill</h2>
<pre class="brush: js">// https://tc39.github.io/ecma402/#sup-array.prototype.tolocalestring
if (!Array.prototype.toLocaleString) {
Object.defineProperty(Array.prototype, 'toLocaleString', {
value: function(locales, options) {
// 1. Let O be ? ToObject(this value).
if (this == null) {
throw new TypeError('"this" is null or not defined');
}
var a = Object(this);
// 2. Let len be ? ToLength(? Get(A, "length")).
var len = a.length >>> 0;
// 3. Let separator be the String value for the
// list-separator String appropriate for the
// host environment's current locale (this is
// derived in an implementation-defined way).
// NOTE: In this case, we will use a comma
var separator = ',';
// 4. If len is zero, return the empty String.
if (len === 0) {
return '';
}
// 5. Let firstElement be ? Get(A, "0").
var firstElement = a[0];
// 6. If firstElement is undefined or null, then
// a.Let R be the empty String.
// 7. Else,
// a. Let R be ?
// ToString(?
// Invoke(
// firstElement,
// "toLocaleString",
// « locales, options »
// )
// )
var r = firstElement == null ?
'' : firstElement.toLocaleString(locales, options);
// 8. Let k be 1.
var k = 1;
// 9. Repeat, while k < len
while (k < len) {
// a. Let S be a String value produced by
// concatenating R and separator.
var s = r + separator;
// b. Let nextElement be ? Get(A, ToString(k)).
var nextElement = a[k];
// c. If nextElement is undefined or null, then
// i. Let R be the empty String.
// d. Else,
// i. Let R be ?
// ToString(?
// Invoke(
// nextElement,
// "toLocaleString",
// « locales, options »
// )
// )
r = nextElement == null ?
'' : nextElement.toLocaleString(locales, options);
// e. Let R be a String value produced by
// concatenating S and R.
r = s + r;
// f. Increase k by 1.
k++;
}
// 10. Return R.
return r;
}
});
}
</pre>
<p>如果你需要支持真正不支持<code><a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty">Object.defineProperty</a></code>的JavaScript引擎,最好不要对<code>Array.prototype</code>方法进行填充,因为你不能使它们不可枚举。</p>
<h2 id="规范">规范</h2>
<table class="standard-table">
<tbody>
<tr>
<th scope="col">Specification</th>
<th scope="col">Status</th>
<th scope="col">Comment</th>
</tr>
<tr>
<td>{{SpecName('ESDraft', '#sec-array.prototype.tolocalestring', 'Array.prototype.toLocaleString')}}</td>
<td>{{Spec2('ESDraft')}}</td>
<td>Initial definition was in ECMAScript 3.</td>
</tr>
<tr>
<td>{{SpecName('ES Int Draft', '#sup-array.prototype.tolocalestring', 'Array.prototype.toLocaleString')}}</td>
<td>{{Spec2('ES Int Draft')}}</td>
<td>This definition supersedes the definition provided in ECMA-262.</td>
</tr>
</tbody>
</table>
<h2 id="浏览器兼容性">浏览器兼容性</h2>
<p>{{Compat("javascript.builtins.Array.toLocaleString")}}</p>
<h2 id="See_also">参见</h2>
<ul>
<li>{{jsxref("Array.prototype.toString()")}}</li>
<li>{{jsxref("Intl")}}</li>
<li>{{jsxref("Object.prototype.toLocaleString()")}}</li>
<li>{{jsxref("Number.prototype.toLocaleString()")}}</li>
<li>{{jsxref("Date.prototype.toLocaleString()")}}</li>
</ul>
|