--- title: String.prototype.localeCompare() slug: Web/JavaScript/Reference/Global_Objects/String/localeCompare tags: - Internationalization - JavaScript - String.prototype.localeCompare() - 原型 - 参考 - 字符串 - 方法 translation_of: Web/JavaScript/Reference/Global_Objects/String/localeCompare ---
localeCompare()
方法返回一个数字来指示一个参考字符串是否在排序顺序前面或之后或与给定字符串相同。
新的 locales 、
options
参数能让应用程序定制函数的行为即指定用来排序的语言。 locales
和 options
参数是依赖于具体实现的,在旧的实现中这两个参数是完全被忽略的。
referenceStr.localeCompare(compareString[, locales[, options]])
查阅浏览器支持部分来确定哪些浏览器支持 locales
参数和 options
参数, 在功能检测中检查对 locales
、options
参数的支持。
compareString
locales
locales
参数的一般形式与解释, 详情请参考 Intl page。 下列的 Unicode 扩展关键词是允许的:co
"big5han"
, "dict"
, "direct"
, "ducet"
, "gb2312"
, "phonebk"
, "phonetic"
, "pinyin"
, "reformed"
, "searchjl"
, "stroke"
, "trad"
, "unihan"
。 "standard"
和"search"
这两个值是被忽略的; 它们被 options
的属性 usage
代替(往下看)。kn
"true"
和 "false"
。 这个选项能被通过options
属性设置或通过 Unicode 扩展。 假如两个都被设置了, 则 options
优先。("language-region-u-kn-true|false")kf
"upper"
, "lower"
, 或 "false"
(use the locale's default)。这个选项能被通过options
属性设置或通过 Unicode 扩展。假如两个都被设置了, 则 options
优先。("language-region-u-kf-upper|lower|false")options
可选。 支持下列的一些或全部属性的一个对象:
localeMatcher
"lookup"
和 "best fit"
; 默认的值是 "best fit"
。更多相关的资料, 请参考 Intl page.usage
"sort"
和 "search"
; 默认是 "sort"
.sensitivity
指定排序程序的敏感度(Which differences in the strings should lead to non-zero result values.) 可能的有:
"base"
: 只有不同的字母字符串比较是不相等的. 举个例子: a ≠ b
, a = á
, a = A
."accent"
: 只有不同的字母或读音比较是不相等的. 举个例子: a ≠ b
, a ≠ á
, a = A
."case"
: 只有不同的字母或大小写比较是不相等的. 举个例子: a ≠ b
, a = á
, a ≠ A
."variant"
: 不同的字母或读音及其它有区别的标志或大小写都是不相等的, 还有其它的差异可能也会考虑到. 举个例子: a ≠ b
, a ≠ á
, a ≠ A
.The default is "variant"
for usage "sort"
; it's locale dependent for usage "search"
.
ignorePunctuation
true
and false
; 默认为 false
.numeric
true
和 false
; 默认为 false
. 这个选项能被通过options
属性设置或通过 Unicode 扩展。假如两个都被设置了, 则 options
优先。 实现不用必须支持这个属性.caseFirst
"upper"
, "lower"
, or "false"
(use the locale's default); 默认为 "false"
. 这个选项能被通过options
属性设置或通过 Unicode 扩展。假如两个都被设置了, 则 options
优先。 实现不用必须支持这个属性.如果引用字符存在于比较字符之前则为负数; 如果引用字符存在于比较字符之后则为正数; 相等的时候返回 0 .
返回一个数字表示是否 引用字符串 在排序中位于 比较字符串 的前面,后面,或者二者相同。
切勿依赖于 -1 或 1 这样特定的返回值。不同浏览器之间(以及不同浏览器版本之间) 返回的正负数的值各有不同,因为W3C规范中只要求返回值是正值和负值,而没有规定具体的值。一些浏览器可能返回-2或2或其他一些负的、正的值。
localeCompare()
// The letter "a" is before "c" yielding a negative value 'a'.localeCompare('c'); // -2 or -1 (or some other negative value) // Alphabetically the word "check" comes after "against" yielding a positive value 'check'.localeCompare('against'); // 2 or 1 (or some other positive value) // "a" and "a" are equivalent yielding a neutral value of zero 'a'.localeCompare('a'); // 0
locales
和 options
参数还没有被所有浏览器所支持。检查是否被支持, 使用 "i" 参数 (a requirement that illegal language tags are rejected) 判断是否有异常 {{jsxref("RangeError")}}抛出:
function localeCompareSupportsLocales() { try { 'foo'.localeCompare('bar', 'i'); } catch (e) { return e.name === 'RangeError'; } return false; }
locales 参数
在不同的语言下 localeCompare()
所提供的结果是不一致的。 为了能让用户得到正确的比较值, 通过使用 locales
参数来提供要比较的语言 (and possibly some fallback languages) :
console.log('ä'.localeCompare('z', 'de')); // a negative value: in German, ä sorts with a console.log('ä'.localeCompare('z', 'sv')); // a positive value: in Swedish, ä sorts after z
options 参数
localeCompare()
所提供的结果可以通过 options
参数来制定:
// in German, ä has a as the base letter console.log('ä'.localeCompare('a', 'de', { sensitivity: 'base' })); // 0 // in Swedish, ä and a are separate base letters console.log('ä'.localeCompare('a', 'sv', { sensitivity: 'base' })); // a positive value
当比较大量字符串时, 比如比较大量数组时, 最好创建一个{{jsxref("Global_Objects/Collator", "Intl.Collator")}} 对象并使用{{jsxref("Collator.prototype.compare", "compare")}} 属性所提供的函数。
规范 | 状态 | 备注 |
---|---|---|
{{SpecName('ES3')}} | {{Spec2('ES3')}} | Initial definition. Implemented in JavaScript 1.2. |
{{SpecName('ES5.1', '#sec-15.5.4.9', 'String.prototype.localeCompare')}} | {{Spec2('ES5.1')}} | |
{{SpecName('ES6', '#sec-string.prototype.localecompare', 'String.prototype.localeCompare')}} | {{Spec2('ES6')}} | |
{{SpecName('ES Int 1.0', '#sec-13.1.1', 'String.prototype.localeCompare')}} | {{Spec2('ES Int 1.0')}} | locale and option parameter definitions. |
{{Compat("javascript.builtins.String.localeCompare")}}