在JavaScript中比较字符串时,为什么一个字符串大于另一个?
我从一本书中看到这段代码:在JavaScript中比较字符串时,为什么一个字符串大于另一个?,javascript,string,compare,java,Javascript,String,Compare,Java,我从一本书中看到这段代码: var a = "one"; var b = "four"; a>b; // will return true 但它没有提到为什么“一”比“四”大。我试过c=“a”,它比a和b小。我想知道JavaScript是如何比较这些字符串的。因为与许多编程语言一样,字符串也是比较的 您可以将其视为的一个更奇特的版本,不同之处在于字母顺序仅包括26个字符a到z 回答一个问题,但逻辑完全相同。另一个好的例子:。“一”以“o”开头,“四”以“f”开头,“o”在字母表中比“f
var a = "one";
var b = "four";
a>b; // will return true
但它没有提到为什么“一”比“四”大。我试过
c=“a”
,它比a和b小。我想知道JavaScript是如何比较这些字符串的。因为与许多编程语言一样,字符串也是比较的
您可以将其视为的一个更奇特的版本,不同之处在于字母顺序仅包括26个字符a
到z
回答一个问题,但逻辑完全相同。另一个好的例子:。“一”以“o”开头,“四”以“f”开头,“o”在字母表中比“f”晚,所以“一”大于“四”。有关JavaScript字符串比较的一些很好的示例(带解释!)。JavaScript对运算符使用字典顺序f'继续“o”,因此比较“一”>“四”在定义如何计算
x
中返回true。当表达式被还原时(即x>y
),我们应该计算y
的结果
所以要解决“一”和“四”,我们必须解决“四”和“一”
同一条款规定:
字符串比较对代码单位值序列使用简单的词典排序
如果两个操作数都是字符串,则:
- 如果(py,px)为true,则返回false
- 如果(px,py)为true,则返回true
- 设k为最小的非负整数,使得px内索引k处的代码单位与py内索引k处的代码单位不同。(必须有这样一个k,因为两个字符串都不是另一个字符串的前缀。)
- 设m为整数,它是px内索引k处代码单位的数值
- 设n为整数,它是py内索引k处代码单位的数值
- 如果m
[…“四”].map(c=>c.charCodeAt(0));
//=> [102, 111, 117, 114]
至于“一”:
[…“一”].map(c=>c.charCodeAt(0));
//=> [111, 110, 101]
所以现在我们必须找到一个k的值(从0开始),其中m[k]和n[k]是不同的:
| 0 | 1 | 2 | 3|
|---|-----|-----|-----|-----|
|m | 102 | 111 | 117 | 114|
|n | 111 | 110 | 101 ||
我们可以看到,在0时,m[0]和n[0]都是不同的
既然m[0]“四”<“一”
为真,因此“一”>“四”
为真
什么是
☂︎" < "☀︎"代码>返回?
[…”☂︎“].map(c=>c.charCodeAt(0))
//=> [9730, 65038]
[..."☀︎“].map(c=>c.charCodeAt(0))
//=> [9728, 65038]
|| 0 | 1|
|---|------|-------|
|m | 9730 | 65038|
|n | 9728 | 65038|
由于9730<9728
为假,因此“☂︎" < "☀︎“
是错误的,这很好,因为雨不比太阳好(显然;)。但是当我比较“一”和“一”时,“一”仍然是更大的一个“一”>“一”
,因为“o”>“a”
。你明白为什么“o”>“a”吗“
?不,我正在搜索一些东西。你能给我一些提示吗?字母表越远,值就越高。这些都是正确的:“z”>“y”;“y”>“c”;“c”>“b”;“b”>“a”代码>只是一个旁注,由于字符串化数字(“1”“2”“3”)的工作方式相同,它会导致排序错误,因为“5”大于“10”。然后,当您尝试订购数字时,请确认它们是真实的数字而不是字符串。如果有疑问,请找出规格。在这种情况下,请参阅本手册第11.8.5节。当然,为了更容易解析答案,SO存档也可以使用。:-)解释字符“值”的最佳解释是将用户指向一个ASCII表,该表表示每个字符的十进制值。@ps2goat good point。请随意建议对此答案进行编辑,以添加:)