JavaScript字符串比较按Unicode码点字典序逐字符进行,首不同即定结果,短串为长串前缀时更小,数字字符按编码值而非数值比较,大小写及符号中文均一视同仁。

JavaScript 字符串比较大小是按 Unicode 码点(UTF-16 编码下的码元值)从左到右逐位比对的,不是看长度、数值大小或自然语言习惯,而是严格字典序。
逐字符比对,遇到不同就停
比较时先取两个字符串在相同位置的字符,查它们的 Unicode 码点值(可用 .charCodeAt(0) 查看),谁大谁小立刻决定结果,后面字符不再参与:
-
"abc" > "ad"→false:首字符'a' === 'a',第二字符'b' (98) ,直接得出 <code>"abc" -
"e" > "abcdefg"→true:首字符'e' (101) > 'a' (97),后面完全不看 -
"你好" > "你们"→true:首字相同(“你”都是 U+4F60),第二字“好”U+597D = 22909,“们”U+4EEC = 20204,22909 > 20204
短串是前缀时自动更小
当一个字符串完全匹配另一个字符串开头部分时,较短者被认为更小:
"abc" → <code>true:前三位一样,“abc”已结束,“abcd”还有第四个字符-
"x" > "xy"→false:因为"x"是"xy"的前缀,所以更小
数字字符也按编码值比,不是按数值
写成字符串的数字,比如 "5" 和 "10",不会被当作 5 和 10 来算,而是比字符本身的 Unicode 值:
立即学习“Java免费学习笔记(深入)”;
-
"5" > "10"→true:因为'5'.charCodeAt() === 53,'1'.charCodeAt() === 49,53 > 49 -
"50" > "6"→false:因为'5' (53) ,第二位都不用比 - 想按数值比?必须显式转换:
Number("50") > Number("6")或parseInt("50") > parseInt("6")
大小写、符号、中文一视同仁
所有字符都按真实 Unicode 码点参与比较,没有特殊规则:
-
"a" > "A"→true(97 > 65) -
"é" > "e"→true(U+00E9 = 233 > 101) "@" → <code>true(U+0040 = 64- 需要中文拼音序、德语变音等语言敏感排序?必须用
"你好".localeCompare("你们")


















