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
|
---
title: String.prototype.localeCompare()
slug: Web/JavaScript/Reference/Global_Objects/String/localeCompare
tags:
- Internationalization
- JavaScript
- Method
- Prototype
- Reference
- String
translation_of: Web/JavaScript/Reference/Global_Objects/String/localeCompare
---
<div>{{JSRef("Global_Objects", "String")}}</div>
<p><strong><code>localeCompare()</code></strong> メソッドは参照文字列がソート順で引数で与えられた文字列と大なり、小なり、等しいとなるかどうかを示す数値を返します。</p>
<div>{{EmbedInteractiveExample("pages/js/string-localecompare.html")}}</div>
<p>新しい<code>locales</code> と <code>options</code> 引数によってアプリケーションはソート順で使われる言語を指定し関数の振る舞いをカスタマイズできます。古い実装では、<code>locales</code>引数と<code>options</code>引数は無視されます。使用されるローケルとソート順は完全に実装依存しています。</p>
<h2 id="Syntax" name="Syntax">構文</h2>
<pre class="syntaxbox notranslate"><code><var>referenceStr</var>.localeCompare(<var>compareString</var>[, <var>locales</var>[, <var>options</var>]])</code></pre>
<h3 id="Parameters" name="Parameters">引数</h3>
<dl>
<dt><code><var>compareString</var></code></dt>
<dd>
<p><code><var>referenceStr</var></code> と比較される文字列。</p>
</dd>
<dt><code><var>locales</var></code> 、 <code><var>options</var></code></dt>
<dd>
<p>これらの引数は関数の振る舞いをカスタマイズし、使用されるべきフォーマット規約の言語をアプリケーションに決めさせます。引数 <code><var>locales</var></code> 、 <code><var>options</var></code> を無視する実装においては、使用されるロケールと返却される文字列の書式は完全に実装依存となります。</p>
<p>これらのパラメーターの詳細及び使用方法については <a href="/ja/docs/Web/JavaScript/Reference/Global_Objects/Collator/Collator"><code>Intl.Collator()</code> コンストラクター</a> を見てください。</p>
</dd>
</dl>
<div>{{page('/docs/Web/JavaScript/Reference/Global_Objects/Collator', 'Parameters')}}</div>
<div>
<h3 id="戻り値">戻り値</h3>
<p><code><var>referenceStr</var></code> が <code><var>compareString</var></code> より前に出現する場合は負数、 <code><var>referenceStr</var></code> が <code><var>compareString</var></code> より後に出現する場合は正数、等しい場合は 0 。</p>
</div>
<h2 id="Description" name="Description">説明</h2>
<p><code><var>referenceStr</var></code> が <code><var>compareString</var></code> より辞書順で先に来るか、後に来るか、あるいは等しいかを示す整数を返します。</p>
<ul>
<li><code><var>referenceStr</var></code> が <code><var>compareString</var></code> より先に出現する場合は負数</li>
<li><code><var>referenceStr</var></code> が <code><var>compareString</var></code> より後に出現する場合は正数</li>
<li>等しい場合は <code>0</code></li>
</ul>
<div class="blockIndicator warning">
<p><strong>戻り値が厳密に -1 や 1 であると考えないように</strong></p>
<p>負数と正数が結果としてどんな数値になるかはブラウザー間(及びブラウザーのバージョン間)で異なります。これは W3C の仕様が負の値か正の値かとだけ指定しているためです。ブラウザーによっては<code>-2</code> や <code>2</code> を、あるいはまた別の負の値、正の値を返却するかもしれません。</p>
</div>
<h2 id="パフォーマンス">パフォーマンス</h2>
<p>巨大な配列のソートなど大量の文字列を比較する場合は {{jsxref("Global_Objects/Collator", "Intl.Collator")}} オブジェクトを作成し、 {{jsxref("Collator.prototype.compare", "compare")}} プロパティで提供される関数を利用すると良いでしょう。</p>
<h2 id="Examples" name="Examples">例</h2>
<h3 id="Example_Using_localeCompare" name="Example:_Using_localeCompare"><code>localeCompare()</code>を使う</h3>
<pre class="brush: js notranslate">// 文字 "a" は "c" は負数になります
'a'.localeCompare('c'); // -2 や -1 (あるいはまた別の負数)
// 単語 "check" はアルファベット順に "against" より後ろなので正数になります
'check'.localeCompare('against'); // 2 や -1 (あるいはまた別の正数)
// "a" と"a" は等しいので自然数 0 になります
'a'.localeCompare('a'); // 0
</pre>
<h3 id="配列のソート">配列のソート</h3>
<p><code>localeCompare()</code> は case-insensitive な配列のソートを行います。</p>
<pre class="notranslate">let items = ['réservé', 'Premier', 'Cliché', 'communiqué', 'café', 'Adieu'];
items.sort( (a, b) => a.localeCompare(b, 'fr', {ignorePunctuation: true}));
// ['Adieu', 'café', 'Cliché', 'communiqué', 'Premier', 'réservé']
</pre>
<h3 id="Example_Checking_for_support_for_locales_and_options_arguments" name="Example:_Checking_for_support_for_locales_and_options_arguments">拡張された引数をブラウザーがサポートしているか調べる</h3>
<p>引数 <code><var>locales</var></code> と <code><var>options</var></code> はすべてのプラウザでまだサポートされていません。</p>
<p>実装がこれらをサポートしているか調べるため引数 <code>"i"</code> (不正な言語タグが除外される要件)を利用し、例外 {{jsxref("RangeError")}} を調べます。</p>
<pre class="brush: js notranslate">function localeCompareSupportsLocales() {
try {
'a'.localeCompare('b', 'i');
} catch (e) {
return e.name === 'RangeError';
}
return false;
}
</pre>
<h3 id="Example_Using_locales" name="Example:_Using_locales"><code>locales</code>を使う</h3>
<p><code>localeCompare()</code>によって得られる結果は言語間で違います。アプリケーションのユーザインターフェイスで使用される言語のソート順を得るために、 <code>locales</code>引数を使用してその言語(そしておそらくいくつかのフォールバック言語)を指定していることを確かめて下さい。:</p>
<pre class="brush: js notranslate">console.log('ä'.localeCompare('z', 'de')); // 負数: ドイツ語で ä は a に分類される
console.log('ä'.localeCompare('z', 'sv')); // 正数: スウェーデン語では ä は z の後になる
</pre>
<h3 id="Example_Using_options" name="Example:_Using_options"><code>options</code>を使う</h3>
<p><code>localeCompare()</code>によって得られる結果は<code>options</code>引数を使用することによってカスタマイズできます。:</p>
<pre class="brush: js notranslate">// ドイツ語では ä の base letter は a
console.log('ä'.localeCompare('a', 'de', { sensitivity: 'base' })); // 0
// スウェーデン語では ä と a は異なる base letters
console.log('ä'.localeCompare('a', 'sv', { sensitivity: 'base' })); // a positive value
</pre>
<h3 id="数字のソート">数字のソート</h3>
<pre class="brush: js notranslate">// デフォルトでは "2" > "10"
console.log(<span class="message-body-wrapper"><span class="message-flex-body"><span class="devtools-monospace message-body">"2".localeCompare("10")</span></span></span>); // 1
// オプションを使った数字
console.log(<span class="message-body-wrapper"><span class="message-flex-body"><span class="devtools-monospace message-body">"2".localeCompare("10", undefined, {numeric: true})</span></span></span>); // -1
// ロケールタグを使った数字
console.log(<span class="message-body-wrapper"><span class="message-flex-body"><span class="devtools-monospace message-body">"2".localeCompare("10", "en-u-kn-true")</span></span></span>); // -1
</pre>
<h2 id="仕様">仕様</h2>
<table>
<thead>
<tr>
<th scope="col">Specification</th>
</tr>
</thead>
<tbody>
<tr>
<td>{{SpecName('ESDraft', '#sec-string.prototype.localecompare', 'String.prototype.localeCompare')}}</td>
</tr>
<tr>
<td>{{SpecName('ES Int Draft', '#sup-String.prototype.localeCompare', 'String.prototype.localeCompare')}}</td>
</tr>
</tbody>
</table>
<h2 id="ブラウザ実装状況">ブラウザ実装状況</h2>
<div>
<p>{{Compat("javascript.builtins.String.localeCompare")}}</p>
</div>
<h2 id="See_also" name="See_also">関連情報</h2>
<ul>
<li>{{jsxref("Global_Objects/Collator", "Intl.Collator")}}</li>
</ul>
|