JavaScript字符串字典序比较直接用等运算符,基于Unicode码点从左到右逐字符比对,大小写敏感且不自动标准化;需本地化排序时应使用localeCompare()。

JavaScript 中字符串的字典序比较直接使用 、>、、>= 等比较运算符即可,底层基于 Unicode 码点逐字符比对,不需要额外方法或转换。
字典序比较的本质是 Unicode 码点顺序
JavaScript 字符串比较不是按“拼音”或“本地化规则”,而是按每个字符在 UTF-16 编码中的数值(即 code unit)从左到右依次比较:
- 先比第一个字符的 Unicode 值;若不同,结果立即确定;
- 若相同,继续比第二个字符,依此类推;
- 如果一个字符串是另一个的前缀(如
"abc"和"abcd"),较短者被认为更小。
例如:"B" 返回 <code>true,因为 B 的 Unicode 码点是 66,a 是 97 —— 大写字母排在小写字母前面。
大小写敏感,且不自动标准化
默认比较严格区分大小写、全角/半角、重音符号等:
立即学习“Java免费学习笔记(深入)”;
"apple" → <code>true(a= 97,A= 65,所以"apple"实际大于"Apple"?错!注意:这里是"apple"与"Apple"比较,首字符a > A,因此"apple" > "Apple");-
"café" !== "cafe",且"café" > "cafe"(因为 é 的码点 U+00E9 = 233 > e 的 101); - 全角数字
"1"(U+FF11)远大于半角"1"(U+0031)。
需要本地化排序时用 String.prototype.localeCompare()
若需符合人类直觉(如忽略大小写、处理重音、支持中文拼音或日文假名顺序),应避免直接用 ,改用:
-
"Apple".localeCompare("apple")→-1(前者排在后者前); -
"cafe".localeCompare("café", undefined, { sensitivity: 'base' })→0(忽略重音); -
["北京", "广州", "上海"].sort((a, b) => a.localeCompare(b, 'zh'))→ 按中文拼音排序。
注意隐式类型转换陷阱
比较运算符不会把字符串转成数字,但混合类型比较可能引发意外:
-
"2" > "10"→true(字典序:字符'2'>'1'); -
"2" > 10→false(此时"2"被转为数字2,再数值比较); - 所以务必确保两边都是字符串再做字典序判断,必要时显式调用
String()。


















