我是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?
答案 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传递给该函数。