我试图比较 qml 字符串"10"比"9"大,但控制台.log给我发了假
console.log("10" > "9");
控制台输出假
qml: false
向我解释为什么这不起作用
向我解释为什么这不起作用
这实际上是一个JavaScript问题,因为这是QML处理器使用的语言。您比较的是字符串,而不是数字。这是对JavaScript中字符串(以及一般(比较的一个很好的解释。
我将引用相关部分并展示我自己的示例:
为了查看一个字符串是否大于另一个字符串,JavaScript 使用所谓的"字典"或"字典"顺序。换句话说,字符串是逐个字母比较的。
比较两个字符串的算法很简单:
- 比较两个字符串的第一个字符。
如果第一个字符串- 中的第一个字符大于(或小于(另一个字符串,则第一个字符串大于(或小于(第二个字符串。大功告成。
- 否则,如果两个字符串的第一个字符相同,则以相同的方式比较第二个字符。
- 重复直到任一字符串的末尾。
- 如果两个字符串以相同的长度结束,则它们相等。否则,较长的字符串越大。
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(十六进制(开头