首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么>= (大于或等于)比较在Javascript中不起作用?

为什么>= (大于或等于)比较在Javascript中不起作用?
EN

Stack Overflow用户
提问于 2015-08-07 00:50:14
回答 2查看 608关注 0票数 3

我在这里错过了什么?这个剧本在我看来是对的。

但出于某种原因,当我发送02897的邮政编码(或任何应该是罗德岛的东西)时,它会返回新罕布什尔州。除了Javascript开发者可能有的政治信念(当然大多数人宁愿住在新罕布西尔而不是罗德岛),为什么这个脚本不能工作呢?

新泽西和阿拉巴马都很好。为什么罗德岛不能得到一些爱?

代码语言:javascript
复制
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;
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-08-07 01:08:40

03000等于1536作为小数。

这是因为前导零导致值被解释为八进制。

既然最后你做的是数字值比较,为什么不在你的比较中忽略前零呢?

代码语言:javascript
复制
else if (thiszip >= 3000 && thiszip <= 3899) {

否则,使用parseInt并声明十进制:

代码语言:javascript
复制
else if (thiszip >= parseInt(03000, 10) && thiszip <= parseInt(03899, 10)) {
                                 // ^^^ pass radix parameter          ^^^ pass radix parameter

您可能想要传递的值是parseInt

代码语言:javascript
复制
var thiszip = parseInt(zip, 10);

types Objects/parseInt

票数 9
EN

Stack Overflow用户

发布于 2015-08-07 01:04:42

如果一个数字在javascript中以零开头,则可以将其视为八进制。

引用下列文件..。

如果输入字符串以"0“开头,则基数为8(八进制)或10 (小数)。准确地选择哪个基是取决于实现的。ECMAScript 5指定使用10 (十进制),但还不是所有浏览器都支持这一点。因此,在使用parseInt时,始终要指定一个基。

Objects/parseInt

然而,这并不是唯一起作用的东西。如果你只是把八进制转换成小数,你就会得到你期望的输出。在铬43中,通过一个不能转换为八进制的数字(任何数字都有8或9),它将保持为基数10。

这可能就是罗德岛之前的if语句给出了您预期的输出的原因。例如,你可能已经通过了03274期待新罕布什尔州,你会得到你的期望。如果声明是这样做的..。

代码语言:javascript
复制
03274 >= 03000 && 03274 <= 03899

皈依为..。

代码语言:javascript
复制
1724 >= 1536 && 1724 <= 3899

然而,当你通过02897期待罗德岛时,逻辑将评估到新罕布什尔州if语句的True。下面是实际比较..。

代码语言:javascript
复制
02897 >= 03000 & 02897 <= 03899

皈依为..。

代码语言:javascript
复制
2897 >= 1536 && 2897 <= 3899

请参阅Kevin的答案,了解如何实际修复该函数,使其按预期工作。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31868020

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档