我是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/

10-10 17:52