JavaScript字符串关系运算符按Unicode码点逐字符比较,而非字面或数学大小;单字符同理;码点不同即返回结果,相同则继续比下位,短者更小;混用数字会触发隐式转换,建议类型一致或用localeCompare。

JavaScript 中关系运算符(<、>、<=、>=)比较字符串时,**不是比“字面意思”或“数学大小”,而是按 Unicode 码点值逐字符比较**。这个规则也适用于单个字符——因为单个字符在 JS 中本质就是长度为 1 的字符串。
按 Unicode 码点从左到右逐位比
比较过程严格遵循以下逻辑:
- 先取两个字符串(或字符)首位置的字符,查各自的 Unicode 码点值(可用
.charCodeAt(0)查看) - 若码点不同,立即返回比较结果,不再看后续字符
- 若相同,继续比下一位;某一方提前结束,则较短者更小
- 完全一致则相等
例如:'b' > 'a' → true(98 > 97);'Z' > 'a' → false(90
大小写敏感,且大小写 Unicode 值差距明显
大写字母 A–Z 的码点是 65–90,小写字母 a–z 是 97–122。所以:
立即学习“Java免费学习笔记(深入)”;
'Apple' → <code>true('A'=65-
'B' > 'a'→false(66
如果想忽略大小写比较,应统一转成大写或小写后再比:str1.toLowerCase() 。
中文、符号、带音调字母都按真实 Unicode 值参与
所有字符一视同仁,只看编码值:
-
'大' > '小'→false(U+5927 = 22823,U+5C0F = 23567) -
'é' > 'e'→ 取决于 é 的 Unicode(U+00E9 = 233)是否大于 e(101),结果是true -
'résumé' > 'resume'不可靠,因本地环境可能影响排序行为,不建议直接用>比较含重音词
字符串和数字混用会触发隐式转换,容易出错
当一边是字符串、另一边是数字时,JS 会尝试把字符串转成数字再比:
-
'123' > 45→true(123 > 45) -
'50' > '6'→false(逐字符比:'5' 码点 53 -
'abc' > 1→false('abc' 转为 NaN,任何与 NaN 的关系比较都返回false)
要避免意外,确保比较双方类型一致;需要语义化或语言敏感排序时,改用 .localeCompare() 方法。


















