aboutsummaryrefslogtreecommitdiff
path: root/files/zh-cn/web/javascript/reference/global_objects/number/tolocalestring/index.html
diff options
context:
space:
mode:
Diffstat (limited to 'files/zh-cn/web/javascript/reference/global_objects/number/tolocalestring/index.html')
-rw-r--r--files/zh-cn/web/javascript/reference/global_objects/number/tolocalestring/index.html165
1 files changed, 165 insertions, 0 deletions
diff --git a/files/zh-cn/web/javascript/reference/global_objects/number/tolocalestring/index.html b/files/zh-cn/web/javascript/reference/global_objects/number/tolocalestring/index.html
new file mode 100644
index 0000000000..e907f810c9
--- /dev/null
+++ b/files/zh-cn/web/javascript/reference/global_objects/number/tolocalestring/index.html
@@ -0,0 +1,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' &amp;&amp; Intl &amp;&amp; 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 id="compat-mobile"> </div>
+
+<h2 id="相关链接">相关链接</h2>
+
+<ul>
+ <li>{{jsxref("Number.prototype.toString()")}}</li>
+</ul>