【发布时间】:2026-02-23 13:45:01
【问题描述】:
我尝试比较 qml 字符串“10”大于“9”,但 console.log 发送给我错误
console.log("10" > "9");
控制台输出错误
qml: false
向我解释为什么这不起作用
【问题讨论】:
我尝试比较 qml 字符串“10”大于“9”,但 console.log 发送给我错误
console.log("10" > "9");
控制台输出错误
qml: false
向我解释为什么这不起作用
【问题讨论】:
向我解释为什么这不起作用
这确实是一个 JavaScript 问题,因为这是 QML 处理器使用的语言。你是comparing 字符串,而不是数字。 Here's a good explanation 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,请注意 radix 参数。在前面的示例中,没有基数参数,因此解释器将回退到默认行为,通常将数字视为十进制,除非它们以零(八进制)或 0x(十六进制)开头
【讨论】: