与 qml 字符串"10"和"9"进行比较



我试图比较 qml 字符串"10"比"9"大,但控制台.log给我发了假

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

控制台输出假

qml: false

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

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

这实际上是一个JavaScript问题,因为这是QML处理器使用的语言。您比较的是字符串,而不是数字。这是对JavaScript中字符串(以及一般(比较的一个很好的解释。

我将引用相关部分并展示我自己的示例:

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

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

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

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

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

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

您可以使用以下解决方法:

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

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

相关内容

  • 没有找到相关文章

最新更新