【问题标题】:Compare to qml string "10" and "9"与 qml 字符串“10”和“9”比较
【发布时间】:2026-02-23 13:45:01
【问题描述】:

我尝试比较 qml 字符串“10”大于“9”,但 console.log 发送给我错误

console.log("10" > "9");

控制台输出错误

qml: false

向我解释为什么这不起作用

【问题讨论】:

    标签: string qt qml compare


    【解决方案1】:

    向我解释为什么这不起作用

    这确实是一个 JavaScript 问题,因为这是 QML 处理器使用的语言。你是comparing 字符串,而不是数字。 Here's a good explanation JavaScript 中的字符串(和一般)比较。

    我将引用相关部分并举出我自己的例子:

    为了查看一个字符串是否大于另一个,JavaScript 使用所谓的“字典”或“字典”顺序。换句话说,字符串是逐字母比较的。

    比较两个字符串的算法很简单:

    1. 比较两个字符串的第一个字符。
    2. 如果第一个字符串的第一个字符大于(或小于)另一个字符串的字符,则第一个字符串大于(或小于)第二个字符串。我们完成了。
    3. 否则,如果两个字符串的第一个字符相同,则以相同的方式比较第二个字符。
    4. 重复直到任一字符串的结尾。
    5. 如果两个字符串的结尾长度相同,则它们相等。否则,字符串越长越大。

    console.log("10" > "9");    // false, first character is smaller
    console.log("9" > "8");     // true, first character is larger
    console.log("9" > "08");    // true, first char. is larger
    console.log("10" > "09");   // true, first char. is larger
    console.log("100" > "11");  // false, second char. is smaller

    【讨论】:

      【解决方案2】:

      如果您知道字符串总是整数(假设它们来自某个变量),您可以更改代码以解析它们,并且比较将正常工作:

      console.log(parseInt("10") > parseInt("9"));
      

      【讨论】:

        【解决方案3】:

        您可以使用此解决方法:

        console.log("10"*1 > "9"*1); // true
        

        如果您要使用 parseInt,请注意 radix 参数。在前面的示例中,没有基数参数,因此解释器将回退到默认行为,通常将数字视为十进制,除非它们以零(八进制)或 0x(十六进制)开头

        【讨论】: