小于和大于产生意外结果。

时间:2014-07-24 08:46:15

标签: javascript google-chrome-extension

我是Javascript的新手,我正在编写操作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&amp;被带到PRIVATEURL2。

输入00600000&amp;被带到PRIVATEURL1。

输入1&amp;被带到PRIVATEURL1。

一切如预期。

但是,请输入:

04542226&amp;被带到PRIVATEURL2。

06000001&amp;被带到PRIVATEURL2。

我不明白,是04542226不是&lt; 070000因此我应该被带到PRIVATEURL1?

1 个答案:

答案 0 :(得分:2)

答案很简单。

你的text显然是一个字符串。说,"07000001"。当进行算术比较时,它会被转换为数字。哪个数字?我们来看看:

> text
"07000001"
> Number(text)
7000001

现在,这是正确的。什么不是你的数字,07000000

或多或少知道您可以使用0x表示法将十六进制数字写为文字:

> 0xFF
255

less 已知的是0前缀是 octal 数字的文字符号。基数8中的7000000是数字1835008:

> 07000000
1835008

因此,您应该使用7000000字面值:

> "04542226" < 07000000
false
> "04542226" < 7000000
true

奇怪的是,parseInt / Number将处理十六进制表示法,但正如我们所见,它忽略了前导零。 This is set by ECMAScript 5 standard.

请注意,如果您期望某个基数,您可以(并且应该)将第二个参数radix传递给该函数。