Javascript ParseInt(),带-1

时间:2014-01-30 10:46:32

标签: javascript parseint

有人可以告诉我为什么var val="08"; alert(parseInt(val-1));显示7 但var val="08"; alert(parseInt(val)-1);显示-1?

日Thnx

2 个答案:

答案 0 :(得分:1)

始终使用parseInt(val,10);确保在十进制系统中解析值。 如果您提醒val-1,即08-1,那么它是7,即parseInt(7) ==> 7

但是当你做的时候

parseInt(val)-1  ==> parseInt("08")-1 ==> 0-1 ==> -1

为什么会变成0? 答案是它假设您要解析八进制数字系统。

所以总是使用第二个参数,即parseInt(whatevervalue,10);

答案 1 :(得分:1)

如果您使用的引擎扩展parseInt("08")以识别八进制(前导NaN表示“八进制”),

parseInt将为您0。如果引擎遵循标准,它会给你8,标准表示不这样做(从ES5开始)。

parseInt("08"-1)有点多余,因为表达式"08"-1将产生一个数字(然后传递给parseInt);只需"08"-1即可。这就是崩溃的原因:

  • 引擎通过尝试将"08" - 1转换为数字来处理表达式"08"。在一个扩展数字文字语法以包含八进制的引擎上,这会失败,但在没有引擎的引擎上,它会给你8。所以表达式的结果是数字 7(8 - 1)。

  • 然后引擎执行parseInt(7),这是多余的,因为7已经是一个数字。会发生什么情况7变为"7",然后再解析回7

请注意上述差异:parseInt("08") - 1的结果将根据引擎是否扩展parseInt将解析的内容而有所不同,但"08" - 1的结果将根据引擎是否扩展而有所不同数字文字语法。这有两个不同的东西,ES5 specification不允许引擎扩展parseInt的语法,但 允许它们扩展数字文字语法(参见§B.1.1 }),但仅限于松散模式。 (令人困惑,我知道。)

外卖消息:始终使用parseInt的基数来告诉它使用的数字基数。