为什么';t>;=(大于或等于)Javascript中的比较工作?
我错过了什么?我觉得这个剧本不错 但由于某种原因,当我给它发送一个zipcode 02897(或者任何应该是罗德岛的东西)时,它返回了新罕布什尔州。除了Javascript开发人员可能有的政治信仰(当然大多数人更喜欢住在新罕布什尔州而不是罗德岛),为什么这个脚本不起作用 新泽西州和阿拉巴马州的情况很好。为什么罗德岛不能得到一些爱为什么';t>;=(大于或等于)Javascript中的比较工作?,javascript,comparison-operators,Javascript,Comparison Operators,我错过了什么?我觉得这个剧本不错 但由于某种原因,当我给它发送一个zipcode 02897(或者任何应该是罗德岛的东西)时,它返回了新罕布什尔州。除了Javascript开发人员可能有的政治信仰(当然大多数人更喜欢住在新罕布什尔州而不是罗德岛),为什么这个脚本不起作用 新泽西州和阿拉巴马州的情况很好。为什么罗德岛不能得到一些爱 function getState(zip) { var thiszip = zip; // parseInt(zip); if (thiszip &g
function getState(zip) {
var thiszip = zip; // parseInt(zip);
if (thiszip >= 35000 && thiszip <= 36999) {
thisst = 'AL';
thisstate = "Alabama";
}
else if (thiszip >= 03000 && thiszip <= 03899) {
thisst = 'NH';
thisstate = "New Hampshire";
}
else if (thiszip >= 07000 && thiszip <= 08999) {
thisst = 'NJ';
thisstate = "New Jersey";
}
else if (thiszip >= 02800 && thiszip <= 02999) {
thisst = 'RI';
thisstate = "Rhode Island";
}
else {
thisst = 'none';
}
return thisst;
}
函数getState(zip){
var thiszip=zip;//parseInt(zip);
如果(thiszip>=35000&&thiszip=03000&&thiszip=07000&&thiszip=02800&&thiszip如果一个数字在javascript中以零开头,则可以将其视为八进制 引用下列文件 如果输入字符串以“0”开头,则基数为8(八进制)或10 (十进制)。具体选择哪个基数取决于实现。 ECMAScript 5指定使用10(十进制),但不是所有浏览器 但仍支持此操作。因此,在使用时始终指定基数 帕森特 然而,这并不是唯一的问题。如果你只是比较小数形式的八进制,你会得到你期望的输出。在chrome 43中,传入一个不能转换为八进制的数字(任何数字都有8或9)将保持它作为基数10 这可能就是为什么罗德岛州之前的
if
语句为您提供了您所期望的输出。例如,您可能通过了邮政编码03274的新罕布什尔州,您将得到您所期望的。if语句实际上正在这样做
03274 >= 03000 && 03274 <= 03899
03274>=03000&&03274=1536&&172403000
等于1536
,以十进制表示
这是因为前导零导致值被解释为八进制
既然最后你在做数值比较,为什么不在比较中省略前导零呢
else if (thiszip >= 3000 && thiszip <= 3899) {
您可能希望parseInt
传入的值:
var thiszip = parseInt(zip, 10);
请添加一个jsfiddleJavaScript将忽略zipI前面的0。zipI评论说JS将忽略0,这很可能是错误的。我假设JavaScript会将其解释为一个数字,但我认为有一种说法是关于假设的!这是两个问题的组合。如果你console.log
02897,如果你记录0,你会得到28973000你得到1536。它被解释为一个数字,但不是十进制,而是八进制,这是处理邮政编码时最大的问题。哇,我知道它一定是这样奇怪的。在javascript中默认为八进制值。喜欢它。谢谢你的快速回答。现在,你有三条指令来修复它,以这种形式:do A或B和C。你能添加括号吗?是,做A或(B和C)还是,做(A或B)和C?我知道这已经很长时间了,但这在Chrome中对我不起作用。我发现parseInt(00300,10)
返回192。偶数Number(00300)
返回192。@TonyBrasunas传递给parseInt
的值需要是字符串:parseInt(“00300”,10)
。但是,您不能这样做:parseInt(00300.toString(),10)
因为八进制将首先计算,因此字符串将为192。我不确定是一直如此,还是引擎已经改变了。@TonyBrasunas我想这会满足您的需要:00300.toString(8)
(产生“300”)(哇,伟大的发现。所以您可以将基数传递到toString()
就像您在parseInt()
中所做的那样。如果将非字符串传递到函数中,这可能足以替换否则抛出的错误。
2897 >= 1536 && 2897 <= 3899
else if (thiszip >= 3000 && thiszip <= 3899) {
else if (thiszip >= parseInt(03000, 10) && thiszip <= parseInt(03899, 10)) {
// ^^^ pass radix parameter ^^^ pass radix parameter
var thiszip = parseInt(zip, 10);