首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Javascript parseInt给出了非常意想不到的结果

Javascript parseInt给出了非常意想不到的结果
EN

Stack Overflow用户
提问于 2010-07-27 08:57:12
回答 4查看 2.9K关注 0票数 2

可能重复:

Workarounds for JavaScript parseInt octal bug

我正在解析一个字符串,以检查它是否是一个日期,而且碰巧我们现在发现我的方法不适用于八月或九月的日期。这就是我所做的(显然,输入并不是硬编码的,但为了简洁.):

代码语言:javascript
运行
复制
var str = '2010-08-26 14:53';
var data = str.split(' ');  // ['2010-08-26', '14:53']
var date = data[0].split('-'); // ['2010', '08', '26]
var time = data[1].split(':'); // ['14', '53']

var yyyy = parseInt(date[0]); // 2010

// THIS IS WHERE STRANGE THINGS HAPPEN:
var MM = parseInt(date[1]); // 0 - not 08 or 8, as expected!
console.log(date[1]); // prints "08" (with quotes)
console.log(date[1].toString()); // prints 08 (no quotes)
console.log(parseInt(date[1].toString())); // prints 0 (!)

8月和9月以及每月8日和9日都会出现这个问题--即,当"08""09"被解析为整数时,将返回0而不是89。该代码适用于较低(例如"07")和较高(例如"10")整数(至少在预期日期范围内.)。

我做错了什么?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-07-27 09:00:36

使用

代码语言:javascript
运行
复制
parseInt(date[1], 10)

以确保字符串被解释为基数10 (小数)。

否则,如果以"0"开头,则被解释为基数8(八进制);如果以"0x"开头,则被解释为基数16 (十六进制)。

实际上,您应该始终包括基参数,以避免这类错误。

票数 9
EN

Stack Overflow用户

发布于 2010-07-27 09:02:18

这是因为以0开头的数字被视为八进制数,而"08“不是八进制,所以返回0。

读这个:http://mir.aculo.us/2010/05/12/adventures-in-javascript-number-parsing/

票数 1
EN

Stack Overflow用户

发布于 2010-07-27 09:06:51

parseInt()函数有第二个可选的基参数。如果省略了基参数,JavaScript假设如下:

如果字符串以"0x“开头,则基数为16 (hexadecimal)

  • If,字符串以"0”开头,基数为8(八进制)。如果字符串以任何其他值开头,基数为10 (十进制)

,则不推荐此特性。

所以在你的例子中,它假设八进制数。更改为var MM = parseInt(date[1], 10);,它将起作用

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

https://stackoverflow.com/questions/3342053

复制
相关文章

相似问题

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