Javascript 小于或大于产生意外结果。

Javascript 小于或大于产生意外结果。,javascript,google-chrome-extension,Javascript,Google Chrome Extension,我是Javascript新手,我正在编写一个Chrome扩展来操纵Javascript 我实现了以下代码: chrome.omnibox.onInputEntered.addListener( function(text) { console.log('inputEntered: ' + text); if (text < 07000000){ chrome.tabs.create({url:"PRIVATEURL1"+ text}); }

我是Javascript新手,我正在编写一个Chrome扩展来操纵Javascript

我实现了以下代码:

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});
}
  });
chrome.omnibox.oninputender.addListener(
功能(文本){
console.log('inpuntered:'+文本);
如果(文本<07000000){
create({url:“PRIVATEURL1”+text});
}
如果(文本>07000000){
create({url:“PRIVATEURL2”+text});
}
});
目前,它的行为如下:

输入07000001并将其带到PRIVATEURL2

输入00600000并将其带到PRIVATEURL1

输入1并将其带到PRIVATEURL1

一切如期而至

但是,请输入:

04542226&将被带到PRIVATEURL2

06000001&被带到PRIVATEURL2


我不明白,04542226不是<07000000,因此我应该被带到私密处吗?

答案很简单

显然,您的
文本是一个字符串。比如说,
“07000001”
。当进行算术比较时,它被转换成一个数字。哪个号码?让我们看看:

> text
"07000001"
> Number(text)
7000001
现在,这是正确的。什么不是你的数字文字,
07000000

大家或多或少都知道,可以使用
0x
表示法将十六进制数写成文字:

> 0xFF
255
不太为人所知的是,
0
前缀是八进制数的文字符号。基数8中的7000000是数字1835008:

> 07000000
1835008
因此,您应该使用
7000000
literal:

> "04542226" < 07000000
false
> "04542226" < 7000000
true
>“04542226”<07000000
假的
> "04542226" < 7000000
真的

奇怪的是,
parseInt
/
Number
将处理十六进制表示法,但正如我们所看到的,它忽略了前导零


请注意,如果需要某个基数,则可以(也应该)向函数传递第二个参数radix。

您的输入是字符串。这样使用它<例如,code>.charAt(N)