javascript字符串比较的逻辑是什么?

时间:2012-03-25 19:40:52

标签: javascript

显然,以下javascript打印为TRUE。

var s = "hippo";
var t = "Hippo";
var test = (s > t);
document.write(test ? "TRUE" : "FALSE");​

是什么让“hippo”比“Hippo”更大? H的ASCII值大于h的ASCII值。

javascript字符串比较的逻辑基础是什么?

http://jsfiddle.net/dUadG/1/

2 个答案:

答案 0 :(得分:2)

它不是ASCII,而是UTF-16:

  

ECMAScript源文本表示为Unicode字符编码3.0或更高版本中的字符序列。如Unicode技术报告#15中所述,预期文本已经标准化为Unicode标准化表格C(规范组合)。符合ECMAScript实现不需要执行任何文本规范化,或者表现得就像它们自己执行文本规范化一样。出于本规范的目的,假设ECMAScript源文本是16位代码单元的序列。这样的源文本可以包括16位代码单元的序列,这些代码单元不是有效的UTF-16字符编码。如果实际源文本以16位代码单元以外的形式编码,则必须将其处理为首先将其转换为UTF-16。

http://es5.github.com/#x6

还可以尝试:

'h'.charCodeAt(0);
'H'.charCodeAt(0);

答案 1 :(得分:1)

字典排序中,我们通常希望小写字母以大写字母显示,以便首先显示专有名称。我认为不一定是这样;这只是英语使用者AFAIK的惯例。字符串中的“X大于Y”表示“X在Y之后显示在字典中”。所以这并不意外。