我是Java语言的新手,我正在写一个可操作Chrome Omnibox的Chrome扩展程序。
我实现了以下代码:
chrome.omnibox.onInputEntered.addListener(
function(text) {
console.log('inputEntered: ' + text);
if (text < 07000000){
chrome.tabs.create({url:"PRIVATEURL1"+ text});
}
if (text > 07000000){
chrome.tabs.create({url:"PRIVATEURL2"+ text});
}
});
当前,它的行为如下:
输入07000001并将其带到PRIVATEURL2。
输入00600000并将其带到PRIVATEURL1。
输入1并将其带到PRIVATEURL1。
一切都如预期。
但是,输入:
04542226&被带到PRIVATEURL2。
06000001&被带到PRIVATEURL2。
我不明白,是04542226不是
最佳答案
答案很简单。
很明显,您的text
是字符串。说,"07000001"
。当进行算术比较时,它被强制转换为数字。哪个数字?让我们来看看:
> text
"07000001"
> Number(text)
7000001
现在,这是正确的。什么不是您的数字文字,
07000000
众所周知,您可以使用
0x
表示法将十六进制数写为文字:> 0xFF
255
鲜为人知的是,
0
前缀是八进制数字的文字符号。以8为底的7000000是数字1835008:> 07000000
1835008
因此,您应该改用
7000000
文字:> "04542226" < 07000000
false
> "04542226" < 7000000
true
奇怪的是,
parseInt
/ Number
将处理十六进制表示法,但正如我们所见,它忽略了前导零。 This is set by ECMAScript 5 standard.请注意,如果期望某个基数,则可以(并且应该)将第二个参数radix传递给该函数。
关于javascript - 小于和大于产生意外结果。,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24929068/