Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在JavaScript中比较字符串时,为什么一个字符串大于另一个?_Javascript_String_Compare_Java - Fatal编程技术网

在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
的结果

所以要解决“一”和“四”,我们必须解决“四”和“一”

同一条款规定:

字符串比较对代码单位值序列使用简单的词典排序

如果两个操作数都是字符串,则:

  • 如果类型(px)是String,类型(py)是String,那么
    • 如果(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。请随意建议对此答案进行编辑,以添加
    :)