我尝试比较qml字符串“ 10”比“ 9”大,但是console.log向我发送了错误消息
console.log("10" > "9");
控制台输出为假
qml: false
向我解释为什么这行不通
答案 0 :(得分:1)
向我解释为什么这行不通
这实际上是一个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
答案 1 :(得分:0)
如果您知道字符串始终都是整数(假设它们将来自某个变量),则可以更改代码以解析它们,并且比较将正常进行:
console.log(parseInt("10") > parseInt("9"));
答案 2 :(得分:0)
您可以使用以下解决方法:
console.log("10"*1 > "9"*1); // true
如果要使用parseInt,请注意radix参数。在上一个示例中,没有基数参数,因此解释器将退回到默认行为,该行为通常将数字视为十进制,除非它们以零(八进制)或0x(十六进制)开头